调用代码(调用之前,必须安装并启动,请参考此帖):
// drvopen.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <winioctl.h>
// DeviceIoControl控制码(未知设备,控制码0x800,缓冲的,任何访问权限)
#define IOCTL1 CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS)
int _tmain(int argc, _TCHAR* argv[])
{
// 打开设备
HANDLE hdev = CreateFile(
TEXT("\\\\.\\HelloDDK"), // 设备链接名称
GENERIC_READ|GENERIC_WRITE, // 读写权限
0, // 不共享
NULL, // 没有安全属性
OPEN_EXISTING, // 打开已存在的文件
FILE_ATTRIBUTE_NORMAL, // 默认属性
NULL); // 没有模板文件
if (hdev == INVALID_HANDLE_VALUE)
{
printf("open device failed\n");
return 1;
}
else
{
printf("open device success %p\n", hdev);
}
char buf1[] = "lower case";
char buf2[sizeof buf1 + 1024];
DWORD bytesret;
// 调用设备的DeviceIoControl请求
printf("put %d bytes: %s\n", sizeof buf1, buf1);
if (DeviceIoControl(hdev, IOCTL1, buf1, sizeof buf1, buf2, sizeof buf2, &bytesret, NULL))
{
printf("get %d bytes: %s\n", bytesret, buf2);
}
else
{
printf("DeviceIoControl failed\n");
}
// 关闭设备
CloseHandle(hdev);
return 0;
}
</winioctl.h></windows.h>
运行结果:
open device success 00000038
put 11 bytes: lower case
get 22 bytes: lower case UPPER CASE