BOOL
DoNdisIOControl(
DWORD dwCommand,
LPVOID pInBuffer,
DWORD cbInBuffer,
LPVOID pOutBuffer,
DWORD *pcbOutBuffer)
{
HANDLE hNdis;
BOOL bResult = FALSE;
hNdis = CreateFile(
DD_NDIS_DEVICE_NAME,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
0,
NULL);
if (INVALID_HANDLE_VALUE != hNdis)
{
bResult = DeviceIoControl(
hNdis,
dwCommand,
pInBuffer,
cbInBuffer,
pOutBuffer,
(pcbOutBuffer ? *pcbOutBuffer : 0x00),
pcbOutBuffer,
NULL);
CloseHandle(hNdis);
}
return bResult;
}
nChars = _sntprintf(
szName,
MAX_PATH-1,
_T("%s\\%s"),
PMCLASS_NDIS_MINIPORT,
ptcDeviceName);
if (nChars != -1)
{
DEBUGMSG (ZONE_NDISUIO,
(TEXT("NdisPower:: Setting adapter [%s] to Power State [%s].\r\n"),
ptcDeviceName,
(CePowerState == D0) ? TEXT("D0") :
(CePowerState == D1) ? TEXT("D1") :
(CePowerState == D2) ? TEXT("D2") :
(CePowerState == D3) ? TEXT("D3") :
(CePowerState == D4) ? TEXT("D4") :
(CePowerState == PwrDeviceUnspecified) ? TEXT("PwrDeviceUnspecified") :
TEXT("UNKNOWN!")));
SetDevicePower(szName, POWER_NAME, CePowerState);
}
//
// IOCTL_NDIS_UNBIND_ADAPTER takes multisz (protocol driver names
// follow the adapter name) hence we need extra NULL.
//
memset (szName, 0x00, sizeof(szName));
_tcscpy(szName, ptcDeviceName);
DoNdisIOControl(
IOCTL_NDIS_UNBIND_ADAPTER,
szName,
(_tcslen(ptcDeviceName)+2) * sizeof(TCHAR),
NULL,
NULL);
这段是先关设备再UNBIND的代码,希望对你有帮助