?? ptutils.cpp
字號:
//////////////////////////////////////////////
// ptutils.cpp文件
#include <windows.h>
#include <winioctl.h>
#include <ntddndis.h>
#include <stdio.h>
#include <tchar.h>
#include "../driver/IOCOMMON.h"
#include "ptutils.h"
HANDLE PtOpenControlDevice()
{
// 打開到驅動程序所控制設備的句柄
HANDLE hFile = ::CreateFile(
_T("\\\\.\\PassThru"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
return hFile;
}
HANDLE PtOpenAdapter(PWSTR pszAdapterName)
{
// 打開控制設備對象句柄
HANDLE hAdapter = PtOpenControlDevice();
if(hAdapter == INVALID_HANDLE_VALUE)
return INVALID_HANDLE_VALUE;
// 確定適配器名稱的長度
int nBufferLength = wcslen((PWSTR)pszAdapterName) * sizeof(WCHAR);
// 發送IOCTL_PTUSERIO_OPEN_ADAPTER控制代碼,打開適配器上下文
DWORD dwBytesReturn;
BOOL bOK = ::DeviceIoControl(hAdapter, IOCTL_PTUSERIO_OPEN_ADAPTER,
pszAdapterName, nBufferLength, NULL, 0, &dwBytesReturn, NULL);
// 檢查結果
if(!bOK)
{
::CloseHandle(hAdapter);
return INVALID_HANDLE_VALUE;
}
return hAdapter;
}
BOOL PtAdapterRequest(HANDLE hAdapter, PPTUSERIO_OID_DATA pOidData, BOOL bQuery)
{
if(hAdapter == INVALID_HANDLE_VALUE)
return FALSE;
// 發送IOCTL
DWORD dw;
int bRet = ::DeviceIoControl(
hAdapter, bQuery ? IOCTL_PTUSERIO_QUERY_OID : IOCTL_PTUSERIO_SET_OID,
pOidData, sizeof(PTUSERIO_OID_DATA) -1 + pOidData->Length,
pOidData, sizeof(PTUSERIO_OID_DATA) -1 + pOidData->Length, &dw, NULL);
return bRet;
}
//////////////////////////////////////
BOOL CIMAdapters::EnumAdapters(HANDLE hControlDevice)
{
DWORD dwBufferLength = sizeof(m_buffer);
BOOL bRet = ::DeviceIoControl(hControlDevice, IOCTL_PTUSERIO_ENUMERATE,
NULL, 0, m_buffer, dwBufferLength, &dwBufferLength, NULL);
if(!bRet)
return FALSE;
// 保存適配器數量
m_nAdapters = (ULONG)((ULONG*)m_buffer)[0];
// 下面從m_buffer中獲取適配器名稱和符號連接名稱
// 指向設備名稱
WCHAR *pwsz = (WCHAR *)((ULONG *)m_buffer + 1);
int i = 0;
m_pwszVirtualName[i] = pwsz;
while(*(pwsz++) != NULL)
{
while(*(pwsz++) != NULL)
{ ; }
m_pwszAdapterName[i] = pwsz;
while(*(pwsz++) != NULL)
{ ; }
if(++i >= MAX_ADAPTERS)
break;
m_pwszVirtualName[i] = pwsz;
}
return TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -