npak
|
|
« Ответ #30 : 25-08-2004 11:15 » |
|
MOPO3, ты теряешь код ошибки после вызова ControlService(hSrv,SERVICE_CONTROL_STOP,&ss); тебе надо перед вызовом ControlService сохранить код ошибки в отдельной переменной и сообщать именно его, а не то, что выдасть GetLastError после вызова ControlService
|
|
« Последнее редактирование: 30-11-2007 23:11 от Алексей1153++ »
|
Записан
|
|
|
|
Pu
Большой босс
Offline
78
|
|
« Ответ #31 : 25-08-2004 11:23 » |
|
MOPO3, чтой то мне кажется что у тебя сервиз находится в состоянии SERVICE_START_PENDING а ты уже начинаешь его узать . После стартсервиз проверь его состояние. к бабке не ходи. посему и еггог дает - ERROR_IO_PENDING
|
|
|
Записан
|
Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс
|
|
|
SOS
Гость
|
|
« Ответ #32 : 25-08-2004 17:16 » |
|
Я тут по поводу GOTO - ох и не люблю я это Я использую вот такую do{ }while( 0 ) конструкцию: int foo() { int status = 0; CString s;
do { GetCurrentDirectory(MAX_PATH,s.GetBuffer(MAX_PATH)); s.ReleaseBuffer(); if (s.Right(1)!=_T("\\")) s+=_T("\\");
s+=_T("blablabla.sys"); AfxMessageBox(s, MB_OK);
SC_HANDLE hSrv; hSrv=CreateService(sc,_T("BlaBlaBla"),_T("BlaBlaBla"), SERVICE_ALL_ACCESS | GENERIC_EXECUTE | SERVICE_START | SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, s, NULL, NULL, NULL, NULL, NULL); CloseServiceHandle(sc);
if (!hSrv) { AfxMessageBox(_T("Unexpected error. Cannot create service"),MB_OK); !! status = 1; !! break; //return; }
if (!StartService(hSrv,0,NULL)) { !! //qq: AfxMessageBox(_T("Cannot start device. blablabla.sys maybe not found"),MB_OK); !! //DeleteService(hSrv); !! //CloseServiceHandle(hSrv); !! status = 2; !! break; //return; } hDevice=CreateFile(_T("\\\\.\\BlaBlaBla"), GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if (hDevice==INVALID_HANDLE_VALUE) { SERVICE_STATUS ss; ControlService(hSrv,SERVICE_CONTROL_STOP,&ss); !! status = 3; !! break; //return; }
}while( 0 );
if( status ) { if( hSrv ) { DeleteService(hSrv); CloseServiceHandle(hSrv); } }
return status; }
И четабильней, и GOTO нет, и Errors проще хэндлить
|
|
« Последнее редактирование: 01-12-2007 10:26 от RXL »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #33 : 25-08-2004 17:59 » |
|
SOS, можно ещё
for(; ; ){...;}
или
while(true){....;}
выход из них - break;
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #34 : 26-08-2004 04:50 » |
|
npak, поставил проверку перед ControlService(hSrv,SERVICE_CONTROL_STOP,&ss); и получил код ошибки 2 : The system cannot find the file specified. странно, потому что файл то есть 100% :l_smile:
|
|
« Последнее редактирование: 01-12-2007 13:29 от Алексей1153++ »
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #35 : 26-08-2004 05:22 » |
|
Поставил проверку в 4 местах. Получаю в таком порядке : сразу после OpenSCManager : 997 сразу после CreateService : 997 сразу перед ControlService : 2 сразу после StartService : 997
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #36 : 26-08-2004 08:21 » |
|
Ну мля, вот это прикол! Я запускал сразу после компиляции из студии нажатием на восклицательный знак, и не работало. Но когда я зашол в каталог релиз и запустил экзэшник вручную, всё ЗАПАХАЛО !!!
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Pu
Большой босс
Offline
78
|
|
« Ответ #37 : 26-08-2004 08:39 » |
|
MOPO3, проздравляю.
|
|
|
Записан
|
Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #38 : 26-08-2004 08:57 » |
|
Pu, спасибо конешно, вот только мне бы ещё понять почему так было
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Serega
Гость
|
|
« Ответ #39 : 26-08-2004 08:57 » |
|
CString s; GetCurrentDirectory(MAX_PATH,s.GetBuffer(MAX_PATH)); s.ReleaseBuffer(); if( s.Right(1) != _T("\\") ) { s+=_T("\\"); } s+=_T("blablabla.sys"); Ну мля, вот это прикол! Я запускал сразу после компиляции из студии нажатием на восклицательный знак, и не работало. Но когда я зашол в каталог релиз и запустил экзэшник вручную, всё ЗАПАХАЛО !!! Когда запускаешь из студии, текущей директорией будет папка, где находится файл проекта, а не debug или release
|
|
« Последнее редактирование: 01-12-2007 13:30 от Алексей1153++ »
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #40 : 26-08-2004 08:59 » |
|
Serega, кидал я и в неё нужный файл И всё равно байда та же была
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #41 : 26-08-2004 09:00 » |
|
Ну главное что проблема решена Остальные тупые вопросы буду задавать уже в отдельной теме
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
npak
|
|
« Ответ #42 : 26-08-2004 09:30 » |
|
MOPO3, в настройках проекта, в закладке Debug выставь опцию 'Working directory'
|
|
|
Записан
|
|
|
|
|