在网上搜索此类问题,搜索到有用的内容相当少,可能是因为比较少人发表这种文章,也不排除比较少人使用内核模式的办法。今晚通过在网上看到的一点资料,结合自己近期研究的课题,使用NtQueryInformationFile实现了根据文件的Handle获取文件路径,程序在VC2008下调试通过,源代码如下:

根据文件的Handle获取文件路径#include "stdafx.h"
根据文件的Handle获取文件路径#include 
<windows.h>
根据文件的Handle获取文件路径#include 
<tchar.h>
根据文件的Handle获取文件路径
根据文件的Handle获取文件路径typedef 
long NTSTATUS;
根据文件的Handle获取文件路径
根据文件的Handle获取文件路径
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
根据文件的Handle获取文件路径
根据文件的Handle获取文件路径
// Define the base asynchronous I/O argument types
根据文件的Handle获取文件路径
typedef struct _IO_STATUS_BLOCK
}


虽然没有使用编写驱动程序,但使用的API跟内核模式的一样的,使用ntdll.dll里的API。类型定义全部从DDK 2003 SP1中摘出来的。

对于NtQueryInformationFile获取到的文件路径,是不带盘符的,如“\test\Debug\test.txt”。还有一个内核API可以根据文件的Handle获取文件路径,就是NtQueryObject,使用它获取的路径是MS-DOS设备路径,如“\Device\HarddiskVolume3\test\Debug\test.txt”。

相关文章: