Testing my first C driver
-
Hi, I have a C file which contains a simple DbgPrint in DriverEntry but, when I build my project, I get 9 errors like C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : ';' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : 'type' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : identifier DriverDispatch I use WDK and CodeBlocks as a C compiler. What is the problem? Please help. Thanks.
-
Hi, I have a C file which contains a simple DbgPrint in DriverEntry but, when I build my project, I get 9 errors like C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : ';' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : 'type' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : identifier DriverDispatch I use WDK and CodeBlocks as a C compiler. What is the problem? Please help. Thanks.
-
Without seeing the actual code it is not easy to guess why you are seeing these syntax errors.
Use the best guess
My code is below; #include "ntddk.h" NTSTATUS STDCALL DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp) { return STATUS_SUCCESS; } VOID STDCALL DriverUnload(IN PDRIVER_OBJECT DriverObject) { DbgPrint("Driver_Unload"); } NTSTATUS STDCALL DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegisterPath) { DbgPrint("Driver_Entry"); DriverObject->DriverUnload=DriverUnload; return STATUS_SUCCESS; } Thanks.
-
My code is below; #include "ntddk.h" NTSTATUS STDCALL DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp) { return STATUS_SUCCESS; } VOID STDCALL DriverUnload(IN PDRIVER_OBJECT DriverObject) { DbgPrint("Driver_Unload"); } NTSTATUS STDCALL DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegisterPath) { DbgPrint("Driver_Entry"); DriverObject->DriverUnload=DriverUnload; return STATUS_SUCCESS; } Thanks.
-
When I build the file, all the lines gives error. I think configuration files have errors. SOURCES and MAKEFILE. Thanks for your replies.
-
My code is below; #include "ntddk.h" NTSTATUS STDCALL DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp) { return STATUS_SUCCESS; } VOID STDCALL DriverUnload(IN PDRIVER_OBJECT DriverObject) { DbgPrint("Driver_Unload"); } NTSTATUS STDCALL DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegisterPath) { DbgPrint("Driver_Entry"); DriverObject->DriverUnload=DriverUnload; return STATUS_SUCCESS; } Thanks.
I'm not sure if this helps. But you may try (for all functions):
// Function declaration with STDCALL calling convention
NTSTATUS STDCALL DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp);// Function definition without calling convention
NTSTATUS DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
return STATUS_SUCCESS;
} -
Hi, I have a C file which contains a simple DbgPrint in DriverEntry but, when I build my project, I get 9 errors like C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : ';' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : 'type' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : identifier DriverDispatch I use WDK and CodeBlocks as a C compiler. What is the problem? Please help. Thanks.
Have you included
windows.h
(or equivalent)? Have you tried commenting out statements until the compiler errors go away, and then introduce them back one by one until the compiler errors show up?"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
-
Have you included
windows.h
(or equivalent)? Have you tried commenting out statements until the compiler errors go away, and then introduce them back one by one until the compiler errors show up?"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
-
When I build the file, all the lines gives error. I think configuration files have errors. SOURCES and MAKEFILE. Thanks for your replies.
-
Hi, I have a C file which contains a simple DbgPrint in DriverEntry but, when I build my project, I get 9 errors like C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : ';' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : 'type' C:\drvtest\src\testdriver.c : error CS2059: Syntax Error : identifier DriverDispatch I use WDK and CodeBlocks as a C compiler. What is the problem? Please help. Thanks.
Good job you cant build it because it will BSOD anyway. You need to do this for starters in DriverEntry:
for (Index = 0 ; Index <= IRP\_MJ\_MAXIMUM\_FUNCTION ; Index++) { DriverObject->MajorFunction\[Index\] = MyDispatch; } DriverObject->DriverExtension->AddDevice = 0; // non PnP so dont set this DriverObject->DriverUnload = MyUnload;
Your MyDispatch actually needs to do something with the Irps, set Information to 0, the status block to success and return success.
Irp->IoStatus.Status = STATUS\_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO\_NO\_INCREMENT); return STATUS\_SUCCESS;
You then need to make sure you are using the DDK (of WDK) compiler, as in actually install the entire DDK (WDK). I dont know what CodeBlocks is, I dont care, the DDK compiler is the one you must use. You need to get your SORCES file right, look at some of the samples that ship with the DDK (WDK). You then need a service entry in the registry in order to start your driver, either inf file or do it manually, then start it with 'net srart'.
============================== Nothing to say.
-
I'm not sure if this helps. But you may try (for all functions):
// Function declaration with STDCALL calling convention
NTSTATUS STDCALL DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp);// Function definition without calling convention
NTSTATUS DriverDispatch(IN PEDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
return STATUS_SUCCESS;
}