📄 usbcontrol.cpp
字号:
}
/*
//Domain Matching Logic
for(DWORD i=0; i<szDomainNames; i++)
{
if(_tcscmp(buffer,(LPCTSTR)&cbDomainNames[i]) != 0)
{
IsFixedDomain == FALSE;
}
}
if(!IsFixedDomain)
{
swprintf_s(pPrintBuf,L"Not Matched Domain : %s\n",buffer);
OutputDebugString(pPrintBuf);
}*/
} else {
OutputDebugString (L"\nMissing authenticating domain information. ");
LsaFreeReturnBuffer(sessionData);
return;
}
// Free the memory returned by the LSA.
LsaFreeReturnBuffer(sessionData);
return;
}
//Build Domain Names that are already present
BOOL CUSBControl::BuildDomainNames()
{
//Variable to maintain the number of domain names present
DWORD counter = 0;
//size of buffer
DWORD szBuf = 0;
//Loop Variable
DWORD i = 0;
//Domain Name buffer
TCHAR *cbComputerName = NULL;
//Message
TCHAR szMsg[260];
//Initialize the domain NT AUTHORITY
_tcscpy(cbDomainNames[counter++],NT_AUTHORITY_DOMAIN);
//Initialize the domain NTLM
_tcscpy(cbDomainNames[counter++],NTLM_DOMAIN);
if(!GetComputerNameEx(ComputerNameNetBIOS,NULL,&szBuf))
{
if(GetLastError() == ERROR_MORE_DATA)
{
cbComputerName = (TCHAR*)malloc(szBuf * sizeof(TCHAR));
if(cbComputerName == NULL)
{
OutputDebugString(L"cbComputerName :: malloc Failed");
return FALSE;
}
if(!GetComputerNameEx(ComputerNameNetBIOS,cbComputerName,&szBuf))
{
OutputDebugString(L"GetComputerNameEx Failed");
return FALSE;
}
else
{
swprintf_s(szMsg,L"Domain Name : %s",cbComputerName);
OutputDebugString(szMsg);
_tcscpy(cbDomainNames[counter++],cbComputerName);
szDomainNames = counter;
for(i=0; i<counter; i++)
{
swprintf_s(szMsg,L"Domain Name%d : %s\n",i,cbDomainNames[i]);
OutputDebugString(szMsg);
}
}
}
else
{
OutputDebugString(L"GetComputerNameEx Failed for the First Time");
return FALSE;
}
}
return TRUE;
}
bool CUSBControl::InstallDriver( SC_HANDLE SchSCManager, LPCTSTR DriverName, LPCTSTR ServiceExe )
{
SC_HANDLE schService;
DWORD err;
schService = CreateService( SchSCManager, // SCManager database
DriverName, // name of service
DriverName, // name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_KERNEL_DRIVER, // service type
SERVICE_DEMAND_START, // start type
SERVICE_ERROR_NORMAL, // error control type
ServiceExe, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL // no password
);
if ( schService == NULL )
{
OutputDebugString(L"\nInside InstallDriver: CreateService Failed");
return FALSE;
}
CloseServiceHandle( schService );
return TRUE;
}
bool CUSBControl::StartDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName )
{
SC_HANDLE schService;
BOOL ret;
schService = OpenService( SchSCManager,
DriverName,
SERVICE_ALL_ACCESS
);
if ( schService == NULL )
{
OutputDebugString(L"\nInside Start Driver:Open Service Failed");
return FALSE;
}
ret = StartService( schService, 0, NULL )
|| GetLastError() == ERROR_SERVICE_ALREADY_RUNNING;
CloseServiceHandle( schService );
return ret;
}
bool CUSBControl::OpenDevice( IN LPCTSTR DriverName, HANDLE * lphDevice )
{
TCHAR completeDeviceName[64];
HANDLE hDevice;
wsprintf( completeDeviceName, TEXT("\\\\.\\%s"), DriverName );
hDevice = CreateFile( completeDeviceName,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if ( hDevice == ((HANDLE)-1) )
{
OutputDebugString(L"\nInside OpenDevice: CreateFile Failed!");
return FALSE;
}
if ( lphDevice )
*lphDevice = hDevice;
else
CloseHandle( hDevice );
return TRUE;
}
bool CUSBControl::StopDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName )
{
SC_HANDLE schService;
BOOL ret;
SERVICE_STATUS serviceStatus;
schService = OpenService( SchSCManager, DriverName, SERVICE_ALL_ACCESS );
if ( schService == NULL )
{
OutputDebugString(L"\nInside StopDriver: Open Service Failed!!");
return FALSE;
}
ret = ControlService( schService, SERVICE_CONTROL_STOP, &serviceStatus );
if(ret==0)
OutputDebugString(L"\nInside StopDriver: ContriolService Failed");
CloseServiceHandle( schService );
return ret;
}
bool CUSBControl::RemoveDriver( IN SC_HANDLE SchSCManager, IN LPCTSTR DriverName )
{
SC_HANDLE schService;
BOOL ret;
schService = OpenService( SchSCManager,
DriverName,
SERVICE_ALL_ACCESS
);
if ( schService == NULL )
{
OutputDebugString(L"\nInside Remove Driver:Open Service Failed");
return FALSE;
}
ret = DeleteService( schService );
if(ret==0)
{
OutputDebugString(L"\nInside Remove Driver:Delete Service Failed");
}
CloseServiceHandle( schService );
return ret;
}
bool CUSBControl::UnloadDeviceDriver( const TCHAR * Name )
{
SC_HANDLE schSCManager;
schSCManager = OpenSCManager( NULL, // machine (NULL == local)
NULL, // database (NULL == default)
SC_MANAGER_ALL_ACCESS // access required
);
if(schSCManager == NULL)
OutputDebugString(L"\nOpenSCManager Failed");
StopDriver( schSCManager, Name );
RemoveDriver( schSCManager, Name );
CloseServiceHandle( schSCManager );
return TRUE;
}
bool CUSBControl::LoadDeviceDriver( const TCHAR * Name, const TCHAR * DriverPath, HANDLE * lphDevice )
{
SC_HANDLE schSCManager=NULL;
BOOL okay;
schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if(schSCManager == NULL)
OutputDebugString(L"\nOpenSCManager Failed");
RemoveDriver( schSCManager, Name );
InstallDriver( schSCManager, Name, DriverPath );
StartDriver( schSCManager, Name );
okay = OpenDevice( Name, lphDevice );
CloseServiceHandle( schSCManager );
return okay;
}
DWORD CUSBControl::Hook_Drives(DWORD MaxDriveSet, DWORD CurDriveSet )
{
DWORD nb;
if ( ! DeviceIoControl( SysHandle, EDDrv_setdrives,
&CurDriveSet, sizeof
CurDriveSet,
&CurDriveSet, sizeof CurDriveSet,
&nb, NULL ) )
return 0;
return CurDriveSet;
}
void CUSBControl::DriverStop(void)
{
unsigned long nb;
unsigned long irpcount;
OutputDebugString(L"\nInside DriverStop");
if ( ! DeviceIoControl( SysHandle,EDDrv_stopfilter,NULL, 0, NULL, 0, &nb, NULL ) )
{
OutputDebugString(L"\n EDDrv_stopfilter failed ");
return;
}
if ( ! DeviceIoControl( SysHandle, EDDrv_unloadquery,NULL, 0, NULL, 0,&irpcount, NULL ) )
{
OutputDebugString(L"\n EDDrv_unloadquery failed ");
return;
}
if( irpcount )
{
OutputDebugString(L"\n Cannot Unload Driver;IRPs dangling");
return;
}
else
{
if ( ! UnloadDeviceDriver( SYS_NAME ) )
{
OutputDebugString(L"\n Unloading Driver Failed");
}
}
return;
}
void CUSBControl::DriverStart(void)
{
unsigned long versionNumber;
unsigned long nb;
FILTER FilterDefinition;
BOOLEAN TimeIsDuration;
DWORD MaxDriveSet,CurDriveSet;
OutputDebugString(L"\nInside DriverStart");
if ( ! LoadDeviceDriver( SYS_NAME, DriverPath, &SysHandle ) )
{
OutputDebugString(L"\n LoadDeviceDriver() Failed");
}
if ( ! DeviceIoControl( SysHandle, EDDrv_startfilter,NULL, 0, NULL, 0, &nb, NULL ) )
{
OutputDebugString(L"\n Start filterinig failed\n");
}
MaxDriveSet=63;
CurDriveSet=FinalUSBData;
Hook_Drives(MaxDriveSet,CurDriveSet );
fflush(stdin);
return ;
}
void CUSBControl::DriverEnable(bool Enable)
{
unsigned long nb;
if(Enable==TRUE)
{
if ( ! DeviceIoControl( SysHandle, EDDrv_uservalid,NULL, 0, NULL, 0, &nb, NULL ) )
{
printf("user validation failed\n");
}
}
else
{
if ( ! DeviceIoControl( SysHandle, EDDrv_userinvalid,NULL, 0, NULL, 0, &nb, NULL ) )
{
printf("user (in)validation failed\n");
}
}
return;
}
VOID CUSBControl::setUSBDrives(DWORD USBDrives)
{
this->USBDrives = USBDrives;
}
DWORD CUSBControl::getUSBDrives()
{
return this->USBDrives;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -