MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« : 16-06-2004 10:37 » |
|
При инсталяции драйвера под WinXP выбрасывается варнинг икспишный. Можно ли как - то этого избежать ? Что для этого надо прописать в драйвере ?
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #1 : 16-06-2004 13:32 » |
|
Я видимо плохо объяснил :oops:
Выскакивает табличка, мол драйвер не WHQL. То биш, как я понимаю надо его сертифицировать у мелкософта ?
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #2 : 16-06-2004 14:44 » |
|
Выскакивает табличка, мол драйвер не WHQL. То биш, как я понимаю надо его сертифицировать у мелкософта ?
Не будет выскакивать если инсталлировать при помощи функций SCM(CreateService и т.д.), если при помощи inf файла, то будет сообщение вываливаться для неподписанных драйверов.
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #3 : 17-06-2004 04:31 » |
|
SlavaI, объясни ламеру пожалуйста поподробней :idea: Или ссылочку подкинь на доки. Я тут драйвер наваял наконец то для создания виртуальных COM портов (с трудом осознавая что же я всё таки делаю. даже книжку из России заказал Солдатова ), и вопросов возникло немерено. Буду потихоньку постить вопросы свои ламерские, так что уж простите и не обижайтесь, если совсем уже тупые вопросы будут P.S. Где почитать как программно заинстулить драйвер например по нажатии кнопки на форме ?
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #4 : 17-06-2004 07:52 » |
|
с трудом осознавая что же я всё таки делаю. даже книжку из России заказал Солдатова
Очень плохая книга. Там куча опечаток и вобще какой-то бред, такие книги не нужны. P.S. Где почитать как программно заинстулить драйвер например по нажатии кнопки на форме ?
На тебе код, сам разбирайся что в итоге выйдет(а можно просто reg файл создать, но динамически драйвер не загрузишь, а этот код динамически грузит- выгружает, для загрузки драйвера во время запуска системы, надо в реестре параметр менять) SC_HANDLE WINAPI w2kServiceConnect (void) { return OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS); }
//----------------------------------------------------------
SC_HANDLE WINAPI w2kServiceDisconnect (SC_HANDLE hManager) { if (hManager != NULL) CloseServiceHandle (hManager); return NULL; }
//----------------------------------------------------------
SC_HANDLE WINAPI w2kServiceManager (SC_HANDLE hManager, PSC_HANDLE phManager, BOOL fOpen) { SC_HANDLE hManager1 = NULL;
if (phManager != NULL) { if (fOpen) { if (hManager == NULL) { *phManager = w2kServiceConnect (); } else { *phManager = hManager; } } else { if (hManager == NULL) { *phManager = w2kServiceDisconnect (*phManager); } } hManager1 = *phManager; } return hManager1; }
//----------------------------------------------------------
SC_HANDLE WINAPI w2kServiceOpen (SC_HANDLE hManager, PWORD pwName) { SC_HANDLE hManager1; SC_HANDLE hService = NULL;
w2kServiceManager (hManager, &hManager1, TRUE);
if ((hManager1 != NULL) && (pwName != NULL)) { hService = OpenService (hManager1, pwName, SERVICE_ALL_ACCESS); } w2kServiceManager (hManager, &hManager1, FALSE); return hService; }
//----------------------------------------------------------
BOOL WINAPI w2kServiceClose (SC_HANDLE hService) { return (hService != NULL) && CloseServiceHandle (hService); }
//----------------------------------------------------------
BOOL WINAPI w2kServiceAdd (SC_HANDLE hManager, PWORD pwName, PWORD pwInfo, PWORD pwPath) { SC_HANDLE hManager1, hService; PWORD pwFile; WORD awPath [MAX_PATH]; DWORD n; BOOL fOk = FALSE;
w2kServiceManager (hManager, &hManager1, TRUE);
if ((hManager1 != NULL) && (pwName != NULL) && (pwInfo != NULL)&&(pwPath != NULL) && (n = GetFullPathName (pwPath, MAX_PATH, awPath, &pwFile)) && (n < MAX_PATH)) { if ((hService = CreateService (hManager1, pwName, pwInfo, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, awPath, NULL, NULL, NULL, NULL, NULL)) != NULL) { w2kServiceClose (hService); fOk = TRUE; } else { fOk = (GetLastError () == ERROR_SERVICE_EXISTS); } } w2kServiceManager (hManager, &hManager1, FALSE); return fOk; }
//----------------------------------------------------------
BOOL WINAPI w2kServiceRemove (SC_HANDLE hManager, PWORD pwName) { SC_HANDLE hService; BOOL fOk = FALSE;
if ((hService = w2kServiceOpen (hManager, pwName)) != NULL) { if (DeleteService (hService)) { fOk = TRUE; } else { fOk = (GetLastError () == ERROR_SERVICE_MARKED_FOR_DELETE); } w2kServiceClose (hService); } return fOk; }
//----------------------------------------------------------
BOOL WINAPI w2kServiceStart (SC_HANDLE hManager, PWORD pwName) { SC_HANDLE hService; BOOL fOk = FALSE;
if ((hService = w2kServiceOpen (hManager, pwName)) != NULL) { if (StartService (hService, 1, (LPCTSTR*)&pwName)) { fOk = TRUE; } else { fOk = (GetLastError () == ERROR_SERVICE_ALREADY_RUNNING); } w2kServiceClose (hService); } return fOk; }
// -----------------------------------------------------------------
BOOL WINAPI w2kServiceControl (SC_HANDLE hManager, PWORD pwName, DWORD dControl) { SC_HANDLE hService; SERVICE_STATUS ServiceStatus; BOOL fOk = FALSE;
if ((hService = w2kServiceOpen (hManager, pwName)) != NULL) { if (QueryServiceStatus (hService, &ServiceStatus)) { switch (ServiceStatus.dwCurrentState) { case SERVICE_STOP_PENDING: case SERVICE_STOPPED: { fOk = (dControl == SERVICE_CONTROL_STOP); break; } case SERVICE_PAUSE_PENDING: case SERVICE_PAUSED: { fOk = (dControl == SERVICE_CONTROL_PAUSE); break; } case SERVICE_START_PENDING: case SERVICE_CONTINUE_PENDING: case SERVICE_RUNNING: { fOk = (dControl == SERVICE_CONTROL_CONTINUE); break; } } } fOk = fOk || ControlService (hService, dControl, &ServiceStatus);
w2kServiceClose (hService); } return fOk; } // -----------------------------------------------------------------
BOOL WINAPI w2kServiceStop (SC_HANDLE hManager, PWORD pwName) { return w2kServiceControl (hManager, pwName, SERVICE_CONTROL_STOP); }
// -----------------------------------------------------------------
BOOL WINAPI w2kServicePause (SC_HANDLE hManager, PWORD pwName) { return w2kServiceControl (hManager, pwName, SERVICE_CONTROL_PAUSE); }
// -----------------------------------------------------------------
BOOL WINAPI w2kServiceContinue (SC_HANDLE hManager, PWORD pwName) { return w2kServiceControl (hManager, pwName, SERVICE_CONTROL_CONTINUE); }
// -----------------------------------------------------------------
SC_HANDLE WINAPI w2kServiceLoad (PWORD pwName, PWORD pwInfo, PWORD pwPath, BOOL fStart) { BOOL fOk; SC_HANDLE hManager = NULL;
if ((hManager = w2kServiceConnect ()) != NULL) { fOk = w2kServiceAdd (hManager, pwName, pwInfo, pwPath);
if (fOk && fStart) { if (!(fOk = w2kServiceStart (hManager, pwName))) { w2kServiceRemove (hManager, pwName); } } if (!fOk) { hManager = w2kServiceDisconnect (hManager); } } return hManager; }
// -----------------------------------------------------------------
BOOL WINAPI w2kServiceUnload (PWORD pwName) { SC_HANDLE hManager1 = NULL; BOOL fOk = FALSE;
if (pwName != NULL) { hManager1 = w2kServiceConnect ();
if (hManager1 != NULL) { w2kServiceStop (hManager1, pwName); fOk = w2kServiceRemove (hManager1, pwName); } } w2kServiceDisconnect (hManager1); return fOk; }
|
|
« Последнее редактирование: 28-11-2007 18:32 от Алексей1153++ »
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #5 : 17-06-2004 10:43 » |
|
SlavaI, благодарю за код. Буду разбираться.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #6 : 21-06-2004 05:28 » |
|
Очень плохая книга. Там куча опечаток и вобще какой-то бред, такие книги не нужны. Странно, но многие говорят что им помогла очень эта книга. К сожалению заказ отменить не успел, оплата прошла и он уже отправлен Ну что ж, почитаем тогда
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
SlavaI
Главный специалист
Offline
|
|
« Ответ #7 : 21-06-2004 07:04 » |
|
Странно, но многие говорят что им помогла очень эта книга.
Мнтогие это кто? Эта книга- перепечатка с DDK, причем с ошибками. Специально дома попытался найти ее- валялась под стопкой книг, я ее прочитал и сразу забросил. Бестселлером этой книге не стать- бестолково написана, она не дает понимания принципов работы системы и того что такое драйвер.
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #8 : 21-06-2004 07:07 » |
|
Многие это кто? Да видел я и в отзывах на разныз букс порталах, да и на форумах разных. Ну раз ерундовая, значит ерундовая. Зря тока бабло потратил мля
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MikePol
Постоялец
Offline
|
|
« Ответ #9 : 24-06-2004 12:26 » |
|
А разве есть альтернатива этой книге ? ( на русском языке) А какая хорошая ?
|
|
|
Записан
|
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #10 : 27-06-2004 14:05 » |
|
MikePol, Альтернатива хорошая - учить Английский - по своему опыту могу сказать, что после 500 страницы начинаешь к нему привыкать - лично я начинал с SoftICE Manual. А что до книги: есть много званных - да мало избранных: если нужна теоретическая база читай WalterOney, MarkRussinovich, Шрабера; практическая - тут полно статей на сайте.
MOPO3, если ты Шрайбером окончательно загрузился могу предложить более глючную и понятную версию, ты уж извени если непонятно, просто ты повторно поднял тему обсуждавшющуюся уже наверное в 7 раз
#include <windows.h> #include <fstream.h>
void main(void) { SC_HANDLE hManager; SC_HANDLE hDriver; SERVICE_STATUS status; DWORD err1; int start;
hManager = OpenSCManager(0,0,SC_MANAGER_ALL_ACCESS); if(!hManager) { err1=GetLastError(); cout<<"Handle "<<hManager<<" error "<<err1<<endl; }
hDriver=OpenService(hManager,"Hello_2",SERVICE_ALL_ACCESS); if(!hDriver) { err1=GetLastError(); cout<<"Handle "<<hDriver<<" error "<<err1<<endl; }
start=StartService(hDriver,0,0); if(!start) { cout<<"Start "<<start<<" error "<<GetLastError(); }
::Sleep(1000);
start=ControlService(hDriver,SERVICE_CONTROL_STOP,&status); if(!start) { cout<<"Stop "<<start<<" error "<<GetLastError()<<endl; }
CloseServiceHandle(hDriver); CloseServiceHandle(hManager); }
|
|
|
Записан
|
1n c0de we trust
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #11 : 28-06-2004 04:32 » |
|
Mayor, прошу прощения, если поднял тему в 8-ой раз :oops:
Кстати, этот код будет работать под вынь98 секонд едишн ?
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Mayor
Специалист
Offline
|
|
« Ответ #12 : 30-06-2004 02:40 » |
|
Кстати, этот код будет работать под вынь98 секонд едишн ?
Я думаю что нет, я его привел как пример 3-4 функций API просто почитай про них в DDK\SDK
|
|
|
Записан
|
1n c0de we trust
|
|
|
dachny
Гость
|
|
« Ответ #13 : 01-07-2004 08:28 » |
|
СПОСОБ ПОДПИСЫВАНИЯ ДРАЙВЕРА САШИ ДАЧНОГО
А я делал так
Запускаю нить с кодом:
DWORD WINAPI KillPopup( LPVOID lpParam ) { HWND hWnd = NULL;
HMODULE hDll = LoadLibraryW( L"setupapi.dll" ); if (hDll == NULL) { return -1; } HRSRC hRes = FindResource(hDll, MAKEINTRESOURCE(5314), RT_DIALOG); if (hRes == NULL) { return -1; } HGLOBAL hResLoad = LoadResource(hDll, hRes); if (hResLoad == NULL) { return -1; }
DLGTEMPLATE* pDlgTmpl = (DLGTEMPLATE*) hResLoad; LPWSTR lpwsz = (LPWSTR) (((LPWORD) (pDlgTmpl + 1) ) + 2);
while (run) { hWnd = FindWindowW( NULL, lpwsz); if ( hWnd != NULL ) {
ShowWindow( hWnd, SW_HIDE); SendMessage( hWnd, WM_COMMAND , 0x14B7, 0 );
} Sleep( 1 ); } return 0; }
Пока ета нить бежит ваполняю
BOOL res = SetupCopyOEMInfW( wInfFullPath, NULL, SPOST_PATH, 0, NULL, 0, NULL, NULL );
А затем
UpdateDriverForPlugAndPlayDevices()
убиваю выше запущенную нить
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #14 : 24-05-2005 14:37 » |
|
Решил не начинать новую тему - наверняка грабли. Итак есть драйвер для USB принтера. Необходимо предынсталлировать их для последущей PnP установки. MSDN по этому поводу:
Pre-installing Driver Files To preinstall driver files, your device installation application should follow these steps:
On the target system, create a directory for the driver files. If your device installation application installs an application, the driver files should be stored in a subdirectory of the application directory. Copy all files in the driver package from the distribution media to the directory created in Step 1. The driver package includes the driver or drivers, the INF file, the catalog file, and so forth. Call SetupCopyOEMInf (described in Platform SDK documentation), specifying the INF file in the directory created in Step 1. Specify SPOST_PATH for the OEMSourceMediaType parameter and specify NULL for the OEMSourceMediaLocation parameter. SetupCopyOEMInf copies the INF file for the driver package into the %windir%\Inf directory on the target system and directs SetupAPI to store the source location of the INF file in its list of preprocessed INF files. SetupCopyOEMInf also processes the catalog file, so the PnP Manager will install the driver the next time it recognizes a device listed in the INF file. When the user plugs in the device, the PnP Manager recognizes the device, finds the INF file copied by SetupCopyOEMInf, and installs the drivers copied in Step 2.
Я делаю: if(!::SetupCopyOEMInf(stInfFile, NULL, SPOST_PATH, 0, NULL, 0, NULL, NULL)) { DWORD dwError = ::GetLastError(); }
Всё отрабатывает, не возникает никакой ошибки. В виндовском INF фолдере появляются два файла: oem12.inf oem12.pnf
Но при подключении принтера, выскакивает стандартный диалог для инсталляции драйвера для принтера.
зы. Драйвер не сертифицирован мелкософтом (пока нет), может от этого не работать?
|
|
« Последнее редактирование: 24-05-2005 14:45 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
dachny
Гость
|
|
« Ответ #15 : 30-05-2005 06:03 » |
|
>>Очень плохая книга. Там куча опечаток и вобще какой-то бред, такие книги не нужны. Согласен на все 100%
|
|
|
Записан
|
|
|
|
|