#include "winioctl.h"
#define READ_DATA CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0800, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define WRITE_DATA CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0801, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define ECHO_DATA CTL_CODE(FILE_DEVICE_UNKNOWN, 0x0802, METHOD_BUFFERED, FILE_ANY_ACCESS)
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hDrv = CreateFile(".//Test",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDrv == INVALID_HANDLE_VALUE)
{
printf("打开设备名出错");
return -1;
}
DWORD dwBytes;
char szBuffer[32] = {0};
char szBuf[32] = {0};
// strcpy(szBuffer, "hello.world");
BOOL bOK = DeviceIoControl(hDrv,
READ_DATA,
szBuf,
12,
szBuffer,
32,
&dwBytes,
NULL);
printf("%d: %s /n", dwBytes, szBuffer);
CloseHandle(hDrv);
return 0;
}
//
void CMFCHookDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
HANDLE hDrv = CreateFile(".//FwHookDrv",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDrv == INVALID_HANDLE_VALUE)
{
AfxMessageBox("打开设备名出错");
return;
}
#define CTL_CODE( DeviceType, Function, Method, Access ) ( /
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) /
)
#define METHOD_BUFFERED 0
#define FILE_ANY_ACCESS 0
//自定义驱动类型
#define FILE_DEVICE_FWHOOKDRV 0x00692322
//自定义一些控制码
#define FWHOOKDRV_IOCTL_INDEX 0x830
//设备类型 控制码 IO方式 访问方式
#define START_IP_HOOK CTL_CODE(FILE_DEVICE_FWHOOKDRV, FWHOOKDRV_IOCTL_INDEX, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define STOP_IP_HOOK CTL_CODE(FILE_DEVICE_FWHOOKDRV, FWHOOKDRV_IOCTL_INDEX+1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define ADD_FILTER CTL_CODE(FILE_DEVICE_FWHOOKDRV, FWHOOKDRV_IOCTL_INDEX+2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define CLEAR_FILTER CTL_CODE(FILE_DEVICE_FWHOOKDRV, FWHOOKDRV_IOCTL_INDEX+3, METHOD_BUFFERED, FILE_ANY_ACCESS)
DWORD dwBytes;
BOOL bOK = DeviceIoControl(hDrv,
STOP_IP_HOOK,
NULL,
0,
NULL,
0,
&dwBytes,
NULL);
if (!bOK) AfxMessageBox("启动失败");
CloseHandle(hDev);
}