Установить драйвер файла NDIS без привязки - PullRequest
0 голосов
/ 12 марта 2020

Я создал образец WinDDK «Драйвер фильтра NDIS 6.0» (ndislwf.sys) и создал пример BindView для установки «Драйвер фильтра NDIS 6.0». Он устанавливает ОК, но по умолчанию он всегда привязан ко всем сетевым интерфейсам. Можно ли установить драйвер фильтра NDIS и отключить его от всех сетевых интерфейсов, чтобы я мог связать его только с определенными интерфейсами?

Код из BindView использует SetupCopyOEMInfW для копирования драйвера в OemInfs:

if ( !SetupCopyOEMInfW(lpszInfFullPath,
                               DirWithDrive,  // Other files are in the
                                              // same dir. as primary INF
                               SPOST_PATH,    // First param is path to INF
                               0,             // Default copy style
                               NULL,          // Name of the INF after
                                              // it's copied to %windir%\inf
                               0,             // Max buf. size for the above
                               NULL,          // Required size if non-null
                               NULL) ) {      // Optionally get the filename
                                              // part of Inf name after it is copied.
            dwError = GetLastError();

А затем использует INetCfgClassSetup :: Install ():

INetCfgClassSetup   *pncClassSetup = NULL;
INetCfgComponent    *pncc = NULL;
OBO_TOKEN           OboToken;
HRESULT             hr = S_OK;

//
// OBO_TOKEN specifies on whose behalf this
// component is being installed.
// Set it to OBO_USER so that szComponentId will be installed
// on behalf of the user.
//

ZeroMemory( &OboToken,
            sizeof(OboToken) );
OboToken.Type = OBO_USER;

//
// Get component's setup class reference.
//

hr = pnc->QueryNetCfgClass ( pguidClass,
                             IID_INetCfgClassSetup,
                             (void**)&pncClassSetup );
if ( hr == S_OK ) {

    hr = pncClassSetup->Install( szComponentId,
                                 &OboToken,
                                 0,
                                 0,       // Upgrade from build number.
                                 NULL,    // Answerfile name
                                 NULL,    // Answerfile section name
                                 &pncc ); // Reference after the component
    if ( S_OK == hr ) {                   // is installed.

        //
        // we don't need to use pncc (INetCfgComponent), release it
        //

        ReleaseRef( pncc );
    }

    ReleaseRef( pncClassSetup );
}

1 Ответ

1 голос
/ 24 марта 2020

Последние версии Windows 10 имеют функцию для этого. Поместите эту строку в ваш INF:

HKR, Ndi\Interfaces, DisableDefaultBindings, 0x00010001, 1

Добавьте эту строку в тот же раздел, который имеет директиву FilterMediaTypes.

Эта директива создаст все новые привязки к вашему фильтру в отключенном штат. Вы можете вручную включить их так же, как и раньше:

  • из командной строки (Set-NetAdapterBinding);
  • GUI (запустите ncpa.cpl, откройте свойства адаптера, установите флажок рядом с драйвером фильтра); или
  • из кода INetCfg (INetCfgBindingPath::Enable).
...