我做了一個映射到任何PE格式文件的內存地址庫,事情是我做它只有用戶的土地,使用標準的.lib格式的Visual Studio 2013。這是否意味着我的庫不能在設備驅動程序中使用?圖書館的設備驅動程序
,比如我有下面的代碼片段:
HMODULE ntdllmod = LoadLibraryA("ntdll.dll");
if (ntdllmod)
{
ZwQueryInformationProcess func = (ZwQueryInformationProcess)GetProcAddress(ntdllmod, "ZwQueryInformationProcess");
}
這非常適用於用戶的土地,但內核我不需要調用GetProcAddress,我只是可以直接調用ZwQueryInformationProcess,因爲它是一個NTOSKRNL出口.. 。廣東話我只是這樣做,例如?:
#IF USER_LAND
HMODULE ntdllmod = LoadLibraryA("ntdll.dll");
if (ntdllmod)
{
ZwQueryInformationProcess func = (ZwQueryInformationProcess)GetProcAddress(ntdllmod, "ZwQueryInformationProcess");
}
#elif KERNEL_MODE
//Run my Kernel version code here.
如果這是不可能的,那麼我是如何構建VS2013的設備驅動程序庫? (無法找到選項)另外任何知道如何鏈接驅動程序庫的指南或參考將有所幫助,假設它不同於普通的庫。
編輯:我已經知道如何使用ZwQueryInformationProcess,問題是如果我可以使用預處理器指令#IF來生成驅動程序庫或用戶模式庫,並在相同的解決方案中有兩個實現。
謝謝。
驅動程序(內核模式)API的是從用戶模式API的不同。我沒有看過這個特殊的功能,但也有許多用戶模式的功能,這些功能要麼不可用,或者通過在驅動程序代碼不同的路線可用。這通常是因爲Windows的開發人員認爲不需要提供該功能(以該形式)。如果你準確地解釋了爲什麼你需要在內核模式下加載一個PE - 也許有另一種方法來實現你正在尋找的東西...... –
謝謝我已經知道,問題是如果我可以使用預處理器指令(#IF)使用WDM SDK的內核導出功能,並同時使用win32常規API。在理論上,編譯器應該根據預處理器指令創建庫,並且將用於內核土地或用戶土地,但我不知道這是否可能... – ffenix