是否有记录或未记录的政策允许标准用户读取打印后台处理位置或他们自己的后台处理文件?

是否有记录或未记录的政策允许标准用户读取打印后台处理位置或他们自己的后台处理文件?

我想读取用户的假脱机文件。我正在编写一个服务来监控%WINDIR%\system32\spool\PRINTERS **然而....

  • 在 Windows 7 上,标准用户无法读取此位置。
  • 在 Windows 10 上,标准用户无法读取此位置。
  • 在 Windows 11 上,标准用户无法读取此位置。

问题):

  • 是否有记录或未记录的政策允许标准用户读取此位置或他们自己的假脱机文件?(我知道文件权限可以解决这个问题,但我宁愿不去管它们,因为它是一个系统目录,将来的更新可能会恢复这个更改)
  • 如果没有,是否有一种快速的方法将假脱机文件呈现到用户空间?(指示假脱机程序将这些文件写入用户可读的位置?)

**笔记:当前已从 检索假脱机文件位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\DefaultSpoolDirectory

可能相关:https://stackoverflow.com/questions/65778053

答案1

使用 PowerShell 作为抓取假脱机文件的示例(根据需要进行调整!)(感谢@swbbl 的推荐)

$jobId = [string](Get-Printer | Get-PrintJob | Select -First 1).Id

$splFile = "$env:WINDIR\system32\spool\PRINTERS\" + $jobId.PadLeft(5, '0') + ".SPL"

Get-Item $splFile

这是因为用户可以读取自己的假脱机文档,但不读取父目录

答案2

因此,事情发生了奇怪的转变,尽管%WINDIR%\system32\spool\PRINTERS目录不可读,您创建的假脱机文件是。因此,如果您可以从 Winspool/Win32 API 中获取jobId,则可以从中计算文件名jobId(例如jobId: 7~= 00007.SPL),然后就可以读取自己的文件。

这是因为 Windows 为你创建的文件添加了特殊的读取权限,至少对于 Windows 10 x86_64 来说是这样。奇怪的是,Windows 11 ARM64 没有,所以除非你更改假脱机文件位置

并非所有应用程序都可以接受被拒绝父文件权限。

cacls C:\WINDOWS\system32\spool\PRINTERS\00007.SPL

C:\WINDOWS\system32\spool\PRINTERS\00007.SPL WIN11\user:(ID)(special access:)

STANDARD_RIGHTS_ALL
DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
SYNCHRONIZE
STANDARD_RIGHTS_REQUIRED
FILE_GENERIC_READ
FILE_GENERIC_WRITE
FILE_READ_DATA
FILE_WRITE_DATA
FILE_APPEND_DATA
FILE_READ_EA
FILE_WRITE_EA
FILE_DELETE_CHILD
FILE_READ_ATTRIBUTES
FILE_WRITE_ATTRIBUTES

例如如果你的 jobId 是“7”:

  • type C:\WINDOWS\system32\spool\PRINTERS\00007.SPL

相关内容