2011-03-11 25 views
1

我正在做一個應用程序虛擬化項目。所以我在NT級​​別掛鉤應用程序,並將註冊表調用指向我的虛擬註冊表。在運行任何應用程序,如果我去到文件 - >打開..我有幾個註冊表調用像如下:NT註冊表處理行爲

  1. ZwOpenKey(registry key path) - >它產生的手柄例如:(0x04e8)
  2. ZwQueryKey(0x4ea,...)

進程監視器說,打開和查詢都在同一個鍵上執行。我自己測試並確認這是同一個關鍵。

此外,查詢鍵爲querykey API生成了正確的結果。 這2個字節的區別並不適用於所有打開和查詢的關鍵情況。

在調用querykey之前,應用程序如何以及爲什麼將句柄從0x4e8更改爲0x4ea

我也測試過在打開和querykey之間調用ZWDuplicateObject,但是未調用duplicateobject api。

任何人都可以說這個句柄如何改變?

回答

3

一個手柄的低2位未使用的內核,因此應用程序可以隨意將它們設置爲其它值和/或某些API使用這些額外的標誌,而不是一個額外的參數

0x4ea & 0xffc == 0x4e8 & 0xffc 

雷蒙德陳做a series討論可能使用這些位:

內核處理始終是四的倍數;底部的兩位可供應用程序使用。但爲什麼應用程序需要這些位呢?

+0

達米安,我正在學習鏈接。非常感謝你這樣一個好的方向。我會盡力爲我的情況制定出來......在你有沒有處理2位的經驗之間。 – 2011-03-11 13:18:57