Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Инсталяция драйвера  (Прочитано 13669 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 16-06-2004 10:37 » 

При инсталяции драйвера под WinXP выбрасывается варнинг икспишный. Можно ли как - то этого избежать ? Что для этого надо прописать в драйвере ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #1 : 16-06-2004 13:32 » 

Я видимо плохо объяснил  :oops:

Выскакивает табличка, мол драйвер не WHQL. То биш, как я понимаю надо его сертифицировать у мелкософта ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #2 : 16-06-2004 14:44 » 

Цитата

Выскакивает табличка, мол драйвер не WHQL. То биш, как я понимаю надо его сертифицировать у мелкософта ?


Не будет выскакивать если инсталлировать при помощи функций SCM(CreateService и т.д.), если при помощи inf файла, то будет сообщение вываливаться для неподписанных драйверов.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #3 : 17-06-2004 04:31 » 

SlavaI, объясни ламеру пожалуйста поподробней  :idea:

Или ссылочку подкинь на доки.
Я тут драйвер наваял наконец то для создания виртуальных COM портов (с трудом осознавая что же я всё таки делаю. даже книжку из России заказал Солдатова Улыбаюсь ), и  вопросов возникло немерено. Буду потихоньку постить вопросы свои ламерские, так что уж простите и не обижайтесь, если совсем уже тупые вопросы будут   Вот такой я вот

P.S. Где почитать как программно заинстулить драйвер например по нажатии кнопки на форме ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
SlavaI
Главный специалист

ru
Offline 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
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #5 : 17-06-2004 10:43 » 

SlavaI, благодарю за код. Буду разбираться.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #6 : 21-06-2004 05:28 » 

Цитата: SlavaI
Очень плохая книга. Там куча опечаток и вобще какой-то бред, такие книги не нужны.


Странно, но многие говорят что им помогла очень эта книга. К сожалению заказ отменить не успел, оплата прошла и он уже отправлен Улыбаюсь Ну что ж, почитаем тогда Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #7 : 21-06-2004 07:04 » new

Цитата

Странно, но многие говорят что им помогла очень эта книга.


Мнтогие это кто? Эта книга- перепечатка с DDK, причем с ошибками. Специально дома попытался найти ее- валялась под стопкой книг, я ее прочитал и сразу забросил. Бестселлером этой книге не стать- бестолково написана, она не дает понимания принципов работы системы и того что такое драйвер.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #8 : 21-06-2004 07:07 » 

Цитата: SlavaI
Многие это кто?


Да видел я и в отзывах на разныз букс порталах, да и на форумах разных.

Ну раз ерундовая, значит ерундовая. Зря тока бабло потратил мля   Ха-ха-ха
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MikePol
Постоялец

ru
Offline Offline

« Ответ #9 : 24-06-2004 12:26 » 

А разве есть альтернатива этой книге ? ( на русском языке)
А какая хорошая ?
Записан
Mayor
Специалист

ru
Offline 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
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #11 : 28-06-2004 04:32 » 

Mayor, прошу прощения, если поднял тему в 8-ой раз  :oops:

Кстати, этот код будет работать под вынь98 секонд едишн ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Mayor
Специалист

ru
Offline 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()

убиваю выше запущенную нить
Записан
Джон
просто
Администратор

de
Offline 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%
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines