Установка драйвера с помощью inf-файла

Тема в разделе "WASM.NT.KERNEL", создана пользователем 777user777, 5 мар 2012.

  1. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    есть драйвер и inf-файл. хочу написать программу для установки этого драйвера через inf-файл. как это сделать?
     
  2. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    в DDK есть примеры
     
  3. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    у меня сейчас нет ddk и скачать в ближайшее время не получится. можешь выложить здесь пример?
     
  4. mansurv

    mansurv New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    38
    Код (Text):
    1. #define APP_NAME    _T("xxxxx")
    2.  
    3. DWORD GetServiceInfFilePath(
    4.     LPTSTR lpFilename,
    5.     DWORD nSize
    6.     )
    7. {
    8.     // Get Path to This Module
    9.     DWORD   nResult;
    10.     TCHAR   szDrive[ _MAX_DRIVE ];
    11.     TCHAR   szDir[ _MAX_DIR ];
    12.  
    13.     nResult = GetModuleFileName( NULL, lpFilename, nSize );
    14.  
    15.     if( nResult == 0 )
    16.     {
    17.         return 0;
    18.     }
    19.  
    20.     _tsplitpath( lpFilename, szDrive, szDir, NULL, NULL );
    21.  
    22.     _tmakepath( lpFilename, szDrive, szDir, NDISPROT_SERVICE_INF_FILE, _T(".inf") );
    23.  
    24.     return (DWORD )_tcslen( lpFilename );
    25. }
    26.  
    27. //
    28. // Function:  InstallSpecifiedComponent
    29. //
    30. // Purpose:   Install a network component from an INF file.
    31. //
    32. // Arguments:
    33. //    lpszInfFile [in]  INF file.
    34. //    lpszPnpID   [in]  PnpID of the network component to install.
    35. //    pguidClass  [in]  Class GUID of the network component.
    36. //
    37. // Returns:   None.
    38. //
    39. // Notes:
    40. //
    41.  
    42. HRESULT InstallSpecifiedComponent(
    43.     LPTSTR lpszInfFile,
    44.     LPTSTR lpszPnpID,
    45.     const GUID *pguidClass
    46.     )
    47. {
    48.     INetCfg    *pnc;
    49.     LPTSTR     lpszApp;
    50.     HRESULT    hr;
    51.  
    52.     hr = (HRESULT) HrGetINetCfg( TRUE, APP_NAME, &pnc, &lpszApp );
    53.  
    54.     if ( hr == S_OK )
    55.     {
    56.         //
    57.         // Install the network component.
    58.         //
    59.         hr = (HRESULT) HrInstallNetComponent(
    60.             pnc,
    61.             lpszPnpID,
    62.             pguidClass,
    63.             lpszInfFile
    64.             );
    65.  
    66.         if ( (hr == S_OK) || (hr == NETCFG_S_REBOOT) )
    67.         {
    68.             hr = pnc->Apply();
    69.         }
    70.         else
    71.         {
    72.             if ( hr != HRESULT_FROM_WIN32(ERROR_CANCELLED) )
    73.             {
    74.                 MessageBox(NULL, L"Couldn't install the network component!", L"Install Error:", MB_OK);
    75.             }
    76.         }
    77.  
    78.         HrReleaseINetCfg( pnc, TRUE );
    79.     }
    80.     else
    81.     {
    82.         if ( (hr == NETCFG_E_NO_WRITE_LOCK) && lpszApp )
    83.         {
    84.             MessageBox(NULL, L"Application currently holds the lock, try later!", L"Install Error:", MB_OK);
    85.             CoTaskMemFree( lpszApp );
    86.         }
    87.         else
    88.         {
    89.             MessageBox(NULL, L"Couldn't the get notify object interface!", L"Install Error:", MB_OK);
    90.         }
    91.     }
    92.  
    93.     return hr;
    94. }
    95.  
    96. DWORD InstallDriver()
    97. {
    98.     DWORD   nResult;
    99.  
    100.     // Get Path to Service INF File
    101.     // ----------------------------
    102.     // The INF file is assumed to be in the same folder as this application...
    103.     TCHAR   szFileFullPath[ _MAX_PATH ];
    104.  
    105.     nResult = GetServiceInfFilePath( szFileFullPath, MAX_PATH );
    106.  
    107.     if( nResult == 0 )
    108.     {
    109.         MessageBox(NULL, L"Unable to get INF file path!", L"Install Error:", MB_OK);
    110.         return 0;
    111.     }
    112.  
    113.     HRESULT hr=S_OK;
    114.  
    115.     hr = InstallSpecifiedComponent(
    116.         szFileFullPath,
    117.         NDISPROT_SERVICE_PNP_DEVICE_ID,
    118.         &GUID_DEVCLASS_NETTRANS
    119.         );
    120.  
    121.     if( hr != S_OK )
    122.     {
    123.         MessageBox(NULL, L"Failed to install NDIS driver!", L"Install Error:", MB_OK);
    124.         return 0;
    125.     }
    126.  
    127.     return 1;
    128. }
     
  5. mansurv

    mansurv New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    38
    Забыл добавить - в проект нужно включить "netcfgapi.h", погугли, кажется на ndis.com есть.
     
  6. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    спасибо