2015-12-24 2 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-разрядный драйвер окна, вы не можете использовать с плавающей точкой «как вам нравится». Я бы сказал, что большую часть времени вы, вероятно, делаете что-то неправильно, если вам нужно выполнить вычисления с плавающей запятой в драйвере.

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

Я подозреваю, что вы хотите решить все, что вы пытаетесь сделать каким-то другим способом. –

Смежные вопросы