2011-03-03 21 views
0

是否有人知道是否有簡單方法將打印用戶的用戶名包含在XPS軟件包或任何頭文件中可訪問的某處在使用XPSDrv時來自驅動程序的數據流中?通過在過濾器管道中使用過濾器(儘管在我看來這並不簡單)?通過讀取TCP/IP標頭值?我試圖找到一個合理的解決方案來縮短我的手指。如何查找打印用戶的用戶名或將其添加到用XPSDrv打印的XPS

+0

這實際上取決於您需要多少簡單的解決方案,您打算如何恢復信息,以及這是您打算作爲自定義xps驅動程序的一部分執行的操作,還是您希望應用於所有xps驅動程序系統。你能縮小一點嗎? – Jon 2011-03-03 17:08:46

+0

@Jon:我已經編譯了WDK的XPSDriver,但我不會說我知道如何編寫C++和WIN32特別好。 XPS將被髮送到我也可以控制的應用程序,以便我可以讀取與應用程序通信時的用戶名或從XPS文件中提取它。現在,在我的應用程序中,我不知道是誰打印了XPS,因爲它沒有被包含在任何地方,據我所知。 – 2011-03-08 09:50:34

回答

1

簡單嗎?不,不是。您最好的選擇是修改XPS驅動程序中的篩選器以執行以下操作:

  1. 使用XPS_FP_USER_TOKEN鍵從管道的屬性包中提取用戶令牌。
  2. 使用GetTokenInfo
  3. 使用LookupAccountSID
  4. 的用戶名添加到打印票據中獲得來自SID的用戶名令牌獲取用戶的SID。爲了讓事情儘可能簡單,我建議重用公共模式中的字段,比如JobComment ParameterInit。

這只是一個起點。我懷疑你將需要深入研究XPS驅動程序如何工作的細節,以使其成爲可靠的解決方案。

+0

謝謝@Jon。它給了我一個很好的起點,即使它不是很簡單,至少我不需要調查驅動程序的所有部分以找出答案。 – 2011-03-09 19:15:48

0

您可以在XPS(核心屬性)中存儲元數據,或者您也可以使用打印票據用於此目的。

+0

這聽起來很合理,但我在哪裏閱讀用戶名?並且在哪個部分驅動程序中,我會創建將其添加到其中的代碼? – 2011-03-08 09:51:58

相關問題