2015-12-24 91 views
3

如何創建一個計算體內某物的驅動程序。我試圖創建一個循環,但我在編有一個錯誤 http://i.stack.imgur.com/4nall.jpg如何創建計算驅動程序?

// TestDriver.c 

#include <ntddk.h> 

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath); 
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject); 

#pragma alloc_text(INIT, DriverEntry) 
#pragma alloc_text(PAGE, UnloadRoutine) 

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) 
{ 
    DriverObject->DriverUnload = UnloadRoutine; 
    while('true'){ 
    int role = pow(2,20); 
} 
    DbgPrint("Hello, Alexey Baranovkiy!\n"); 
    return STATUS_SUCCESS; 
} 

VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject) 
{ 
    DbgPrint("Bye!\n"); 
} 
+0

可能你需要類似'-lm'嗎? – 6502

+0

您將'pow'的結果賦值給'int',但它是一個浮點函數。這是你的意圖嗎?在驅動程序中使用浮點通常不常用,需要執行特殊步驟。 –

回答

6

本質上說,在32位Windows驅動程序,您不能使用浮點「如你所願。」我會說大多數時候,如果您需要在驅動程序中執行浮點計算,您可能會做錯某些事情。

https://msdn.microsoft.com/en-us/library/windows/hardware/ff565388%28v=vs.85%29.aspx

標準的浮點運算不適合在驅動程序即可使用,所以你將最有可能還需要編寫自己的函數。

當然,您使用的功能會完全替代的一個簡單的

role = 1 << 20; 

但是,這樣做pow(1.5, 3.7)不會那麼容易,而不浮點計算的,如果你的目標是漂亮計算很多浮點計算,那麼你將面臨一個有趣的挑戰。沒有真正的現成解決方案。

+0

謝謝你的隊友。你的建議可以幫助我編譯代碼:)但是現在KMDManage不想註冊我的sys文件......我想因爲我有了無限循環。現在有人可以在裏面創建主要?當我嘗試製作它時,我遇到了不同的錯誤 –

+1

嗯,你真的不想在驅動程序中出現無限循環,對嗎?是的,驅動程序是在你的DriverEntry返回後註冊的,所以在這裏放置一個無限循環是一個非常糟糕的選擇。 I –

+0

我懷疑你想解決你試圖以其他方式做的任何事情。 –

相關問題