蛋疼的ObReferenceObjectByName调试

本文记录了作者在使用ObReferenceObjectByName内核函数时遇到的编译问题和解决过程。从WDK环境的编译错误,到网上搜索解决方案,再到尝试不同参数类型,最终发现内核程序对自动强制转换的限制与普通应用不同,从而解决问题。这一过程让作者在蛋疼的调试中有所收获。
摘要由CSDN通过智能技术生成

今天花了近一天的时间都在调试ObReferenceObjectByName这个内核函数,结果却无比狗血。故写篇文章记录一下这一天蛋疼的调试记录。

其实说是调试,其实是一直编译连接不通过。今天在研究楚狂人(其实是360的大牛wowocock写的代码,楚狂人进行了简化处理)的键盘过滤驱动代码。

有一段代码是要获得kbdclass这个内核驱动对象的对象地址,然后获得整个设备链,将过滤设备绑定在所有设备之上。其中要用到ObReferenceObjectByName()这个内核函数,

代码如下:

POBJECT_TYPE IoDriverObjectType; 

NTSTATUS ObReferenceObjectByName(   
	IN PUNICODE_STRING ObjectPath,   
	IN ULONG Attributes,   
	IN PACCESS_STATE PassedAccessState OPTIONAL,   
	IN ACCESS_MASK DesiredAccess OPTIONAL,   
	IN POBJECT_TYPE ObjectType,   
	IN KPROCESSOR_MODE AccessMode,   
	IN OUT PVOID ParseContext OPTIONAL,   
	OUT PVOID *ObjectPtr);

// 初始化一个字符串,就是Kdbclass驱动的名字。
	RtlInitUnicodeString(&uniNtNameString, KBD_DRIVER_NAME); 
	// 请参照前面打开设备对象的例子。只是这里打开的是驱动对象。
	status = ObReferenceObjectByName ( 
		&uniNtNameString, 
		OBJ_CASE_INSENSITIVE, 
		NULL, 
		0, 
		IoDriverObj
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值