阅读:9331回复:15
如何使用ObOpenObjectByName?
status = ObOpenObjectByName( ObjectAttributes,
(POBJECT_TYPE) NULL, requestorMode, NULL, DesiredAccess, &openPacket, &handle ); 这是我的一段调用代码DesiredAccess,requestorMode应该是没问题的 openPacket是一个已经填充好的结构. ObjectAttributes如下: InitializeObjectAttributes( &objectAttributes, &fileName, OBJ_CASE_INSENSITIVE, // !!! can we do this? NULL, NULL // !!! Security ); 返回的是c0000024 OBJECT_TYPE = IoFileObjectType时也是c0000024 请问,这个错误代码是哪的问题呢?我完全按照NT4Src中的IoCreateFile那段写的? 请大牛指导. |
|
沙发#
发布于:2007-01-28 08:46
extern "C" POBJECT_TYPE *IoFileObjectType;
status = ObOpenObjectByName( ObjectAttributes, *IoFileObjectType,........... |
|
板凳#
发布于:2007-01-28 18:09
看来我们的问题一样哦。。。。。。。。。。。
偶也是返回 c0000024 郁闷! 汇编里面 POBJECT_TYPE *IoFileObjectType 怎么定义不了 |
|
地板#
发布于:2007-01-28 21:22
openPacket
结构不对是不行的~ 嘿嘿~ |
|
|
地下室#
发布于:2007-01-29 00:35
To:killvxk
killvxk光顾真的是荣幸,小弟多次看见老大你使用ObOpenObjectByName 深信你一定非常了解此函数. 以下是我的愚见, IopParseDevice对OpenPacket的检查是: if (op == NULL || op->Type != IO_TYPE_OPEN_PACKET || op->Size != sizeof( OPEN_PACKET )) { return STATUS_OBJECT_TYPE_MISMATCH; } 首先Type,Size我想都因该是符合的.不知道killvxk认为大概是哪个地方有问题呢? 另外,除了在此函数有检查外,是否其他地方也有检查呢? 建议killvxk老大贴出openPacket的详细填充方法,我首先贴出我的,完全转自nt4src openPacket.EaBuffer = (PFILE_FULL_EA_INFORMATION) NULL; openPacket.EaLength = 0L; openPacket.Type = IO_TYPE_OPEN_PACKET; openPacket.Size = sizeof( OPEN_PACKET ); openPacket.ParseCheck = 0L; openPacket.AllocationSize = initialAllocationSize; openPacket.CreateOptions = CreateOptions; openPacket.FileAttributes = (USHORT) FileAttributes; openPacket.ShareAccess = (USHORT) ShareAccess; openPacket.Disposition = Disposition; openPacket.Override = FALSE; openPacket.QueryOnly = FALSE; openPacket.DeleteOnly = FALSE; openPacket.Options = Options; openPacket.RelatedFileObject = (PFILE_OBJECT) NULL; openPacket.CreateFileType = CreateFileType; openPacket.ExtraCreateParameters = ExtraCreateParameters; openPacket.FinalStatus = STATUS_SUCCESS; openPacket.FileObject = (PFILE_OBJECT) NULL; killvxk老大请赐教.等你回帖,顺便问问,ObOpenObjectByName能避免重入么? To:slwqw IoFileObjectType这个参数我写上时也是正确的.况且WINDOWS 原码是设置为NULL To:jwihack 最好能留个联系方式,讨论下.我目前碰到0x24就停顿下来了 |
|
5楼#
发布于:2007-01-29 00:39
To:liio
QQ:93632414 一起讨论 |
|
6楼#
发布于:2007-01-29 00:52
哈哈,这么晚不睡啊.我今天晚上8点才起床,
|
|
7楼#
发布于:2007-01-29 11:46
2K,NT4 SRC里的OPENPACKET有问题,不能直接拿来用的.
|
|
|
8楼#
发布于:2007-01-29 13:17
引用第7楼wowocock于2007-01-29 11:46发表的“”: 哈哈这都发现了~ |
|
|
9楼#
发布于:2007-01-29 15:51
我们昨天晚上跟了API很久.
他发现的大概也差不多.因该说2k,nt4下的op结构在XP下不可用吧 wowocock killvxk 老大,可否能给一个可用的OP结构呢? |
|
10楼#
发布于:2007-01-29 15:54
最好能给份填充的样本和定义,
如果能.真的太感激;了! |
|
11楼#
发布于:2007-01-30 10:50
.....郁闷
看来我的问题 一定跟这个有关系 |
|
12楼#
发布于:2007-01-30 11:50
引用第11楼jwihack于2007-01-30 10:50发表的“”: 打开文件和打开设备不一样,哈哈~ |
|
|
13楼#
发布于:2008-12-15 13:57
我在用驱动调用ACPI的方法时也遇到了类似问题,具体情况是我在我的驱动里向ACPI驱动发IOCTL_ACPI_EVAL_METHOD,用应用程序打开我的驱动然后发DeviceIoControl码就可以实现功能,但是用笔记本功能键发notify时就不行,受到Notify后用IoCallDriver调用,开始一直报0XC0140006(解释是ACPI严重错误),怀疑是没有打开\\Driver\\ACPI造成的(之前没有打开是因为,应用程序的打开方法里也没有特意打开也能实现调用),后来尝试用过ZwCreateFile,ZwOpenFile,ObOpenObjectByName等方法去打开ACPI,前两中都返回0XC0000024类型不对,试了很多次,但是也不知 哪里不对,ObOpenObjectByName,总是蓝屏,说PAGE_FAULT_IN_NONPAGED_AREA,可能我参数没下对。
哪位牛鬼蛇神能帮忙解决下,不胜感激。 |
|
14楼#
发布于:2008-12-15 13:59
忘了联系方式,
qq:115210824 email:ralf_824@sohu.com |
|
15楼#
发布于:2009-12-17 23:57
搞半天,用wrk的填充方式搞OPEN_PACKET,可以成功,微软太可恶了。
|
|