应用层驱动调用

 

#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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值