在 SysInternals Handle.exe 的输出中,RWD 代​​表什么?

在 SysInternals Handle.exe 的输出中,RWD 代​​表什么?

我正在使用handle.exeSysInternals 获取有关打开句柄的信息。运行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

我假设RW代表读和写,但我似乎找不到关于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文件)。如果驱动程序不存在,它会创建一个。

  • 在内核模式下,0x8335004CIOCTL 查询迭代与该进程相关的所有对象/句柄,并确定对象类型ZwQueryObject()ObReferenceObjectByHandle()

  • 当收到“文件”句柄时,通过0x83350048IOCTL 查询, 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';

答案2

这是共享模式文件句柄——请参阅 Win32 API 文档中 CreateFile() 下的 dwShareMode。

共享模式实际上与“强制锁定”相反,程序在打开文件时指定是否应允许其他程序同时打开它。(我相信它可以追溯到 MS-DOS 时代的“LAN 管理器”网络。另请参阅SMB 协议文档

这些字母代表r读/仪式/d選擇。

相关内容