Ситуация такая. Драйвер с помощью inf файла устанавливается и работает, в отладчике это видно. Но надо им управлять через DeviceIoControl. На сколько я понимаю, надо сделать следующее:
1. OpenSCManager
2.CreateService() или OpenService()
3. StartService()
4. CreateFile()
Возникли трудности -- при первом запуске шага 2 выполнился CreateService(), а потом даже после перезагрузки только OpenService(). Зватем StartService() не выполняется....
И не выполняется CreateFile(). Где ошибка? Привожу распечатку кода:
bool status;
status=FALSE;
SC_HANDLE hSCManager=NULL;
SC_HANDLE hService=NULL;
DWORD err;
LPTSTR lpBuffer;
HANDLE hDevice;
lpBuffer = new char[256];
//ПРАВИЛЬНО ЛИ ТУТ???
strcpy(lpBuffer,"D:\winnt\system32\drivers\\passthru.sys");
hSCManager=OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (hSCManager == NULL)
{
MessageBox("error open Manager");
} else status=TRUE;
LPTSTR m_name = new char[20];
strcpy(m_name, "passthru.sys");
hService = CreateService(hSCManager,m_name,m_name,SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,lpBuffer,NULL,NULL,NULL,NULL,NULL);
if (!hService)err=GetLastError();
hService=OpenService(hSCManager,m_name,SERVICE_ALL_ACCESS);
if (!hService)err=GetLastError();
status = StartService(hService,0,NULL);
hDevice = CreateFile ("\\?\D:\winnt\system32\drivers\passthru", GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
status=FALSE;
CloseServiceHandle (hService);
hService=NULL;
if(!DeleteService(hService)) MessageBox("ERROR DELETE");
DeviceIoControl(hDevice, TEST_SMTH, NULL, 0,&test, 4, &ReturetLength, NULL);
Заранее Благодарен.