acmilan作者
10年5个月前修改于 10年5个月前IP:四川
822017
1楼

调用代码(调用之前,必须安装并启动,请参考此帖):

// 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
评论
文号 / 822017

千古风流
名片发私信
学术分 4
总主题 466 帖总回复 2942 楼拥有证书:进士 学者 笔友
注册于 2009/05/30 21:22:42最后登录 2019/01/31 17:16:38
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的