cgdxxx
驱动牛犊
驱动牛犊
  • 注册日期2003-04-04
  • 最后登录2009-04-29
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1496回复:3

挂钩ZwOpenFile中怎样得到文件的全路经?(附代码)

楼主#
更多 发布于:2004-09-29 22:19
在hook_ZwOpenFile中怎么样得到文件的全路经?我用了ObReferenceObjectByHandle
ObQueryNameString的经典方法,一般情况还可以,但是进到dos的控制台时候,出现了8.3文件名,这样我的识别规则就失效了,怎么处理啊?


我的代码如下:

NTSTATUS my_ZwOpenFile (
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG ShareAccess,
IN ULONG OpenOptions
)
{
int rc;
char ParentDirectory[1024];
PUNICODE_STRING Parent=NULL;
int BytesReturned;

ParentDirectory[0]='\0';
if (ObjectAttributes->RootDirectory!=0)
{
PVOID Object;
Parent=(PUNICODE_STRING)ParentDirectory;
rc=ObReferenceObjectByHandle(myFileHandle,0,0,KernelMode,
&Object,NULL);
if (rc==STATUS_SUCCESS)
{
rc=ObQueryNameString(Object,(PUNICODE_STRING)ParentDirectory,sizeof(ParentDirectory),&BytesReturned);
ObDereferenceObject(Object);
if (rc!=STATUS_SUCCESS)
{
RtlInitUnicodeString(Parent,L"Unknown\\");
}
}
else{
RtlInitUnicodeString(Parent,L"Unknown\\");
}
}
DbgPrint("ZwOpenFile : Filename = %S%S%S\n",Parent?Parent->Buffer:L"",
Parent?L"\\":L"", ObjectAttributes->ObjectName->Buffer);

rc = Real_ZwOpenFile (FileHandle, DesiredAccess, ObjectAttributes,
IoStatusBlock, ShareAccess, OpenOptions);
DbgPrint("ZwOpenFile : rc = %x\n", rc);
return rc;
}
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-03 18:16
看看OBJECT_ATTRIBUTES结构就知道了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-03 15:18
代码没有贴全吧!
cgdxxx
驱动牛犊
驱动牛犊
  • 注册日期2003-04-04
  • 最后登录2009-04-29
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-29 22:20
ParentDirectory[0]='\0';
if (ObjectAttributes->RootDirectory!=0)
{
PVOID Object;
Parent=(PUNICODE_STRING)ParentDirectory;

rc=ObReferenceObjectByHandle(myFileHandle,0,0,KernelMode,
&Object,NULL);
if (rc==STATUS_SUCCESS)
{
rc=ObQueryNameString(Object,(PUNICODE_STRING)ParentDirectory,sizeof(ParentDirectory),&BytesReturned);
ObDereferenceObject(Object);
if (rc!=STATUS_SUCCESS)
{
RtlInitUnicodeString(Parent,L"Unknown\\");
}
}
else{
RtlInitUnicodeString(Parent,L"Unknown\\");
}
}
DbgPrint("ZwOpenFile : Filename = %S%S%S\n",Parent?Parent->Buffer:L"",
Parent?L"\\":L"", ObjectAttributes->ObjectName->Buffer);

rc = Real_ZwOpenFile (FileHandle, DesiredAccess, ObjectAttributes,
IoStatusBlock, ShareAccess, OpenOptions);
DbgPrint("ZwOpenFile : rc = %x\n", rc);
return rc;
}
游客

返回顶部