我正在使用handle.exe
SysInternals 获取有关打开句柄的信息。运行handle.exe -p cmd
以获取句柄cmd.exe
,我得到了以下输出。其他输出类似,只是更长。
cmd.exe pid: 22916 NT AUTHORITY\SYSTEM
3C: File (RW-) C:\Windows
7C: File (RW-) C:\Program Files (x86)\ManageEngine\AssetExplorer\bin
------------------------------------------------------------------------------
cmd.exe pid: 22264 RADHSV\nsshinabarger
3C: File (RW-) C:\Users\nsshinabarger\Downloads\Handle
12C: File (R-D) C:\Windows\System32\en-US\cmd.exe.mui
我假设R
和W
代表读和写,但我似乎找不到关于D
代表什么的文档。有人能告诉我它代表什么吗,或者给我提供文档吗?
谢谢你!
答案1
免责声明:这个答案对 Windows 内核的一些内容进行了深入解释。
要旨:
SharedAccess
参数来自NtCreateFile()
。
| Name | ShareAccess | Value |
|:----:|:-----------------:|:--------:|
| R | FILE_SHARE_READ | 1 |
| W | FILE_SHARE_WRITE | 2 |
| D | FILE_SHARE_DELETE | 4 |
怎么运行的
处理程序从进程名称中获取进程 ID。然后它将进程 ID/客户端 ID 传递给 Process Explorer 的内核模式驱动程序(也称为
PROCEXP152.sys
文件)。如果驱动程序不存在,它会创建一个。在内核模式下,
0x8335004C
IOCTL 查询迭代与该进程相关的所有对象/句柄,并确定对象类型ZwQueryObject()
和ObReferenceObjectByHandle()
。当收到“文件”句柄时,通过
0x83350048
IOCTL 查询,ZwOpenProcess()
和ObReferenceObjectByHandle()
创建一个FILE_OBJECT
结构。然后内核模式驱动程序通过检查共享访问布尔值创建一个位字段,如下所示:
if (FileObject->SharedRead)
Mode |= 1;
if (FileObject->SharedWrite)
Mode |= 2;
if (FileObject->SharedDelete)
Mode |= 4;
用户模式程序接收该“模式”并将其转换为字符,如下所示:
FirstBit = '-';
SecondBit = '-';
if (Mode & 4)
FirstBit = 'D';
ThirdBit = '-';
if (Mode & 2)
ThirdBit = 'W';
if (Mode & 1)
SecondBit = 'R';