Вот код. Код (Text): extern "C" { #include "ntddk.h" } UNICODE_STRING usDevName,usSymLinkName; extern "C" NTSTATUS DispatchCreate(PDEVICE_OBJECT pDeviceObject,PIRP pIrp) { DbgPrint("DispatchCreate"); return STATUS_SUCCESS; } NTSTATUS DispatchControl(PDEVICE_OBJECT pDeviceObject,PIRP pIrp) { NTSTATUS ntStatus; PIO_STACK_LOCATION pslIrpStack = IoGetCurrentIrpStackLocation(pIrp); // pslIrpStack->Parameters.IoControlCode DbgPrint("DispatchControl"); pIrp->IoStatus.Status = STATUS_SUCCESS; pIrp->IoStatus.Information = 0; IoCompleteRequest(pIrp,IO_NO_INCREMENT); return STATUS_SUCCESS; } NTSTATUS DispatchClose(PDEVICE_OBJECT pDeviceObject,PIRP pIrp) { DbgPrint("DispatchClose"); return STATUS_SUCCESS; } void Unload(PDRIVER_OBJECT pDriverObject) { DbgPrint("Driver unload"); IoDeleteSymbolicLink(&usSymLinkName); IoDeleteDevice(pDriverObject->DeviceObject); } NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pusRegistryPath) { NTSTATUS Status = STATUS_SUCCESS; PDEVICE_OBJECT pDeviceObject; RtlInitUnicodeString(&usDevName,L"\\Device\\devRing0"); RtlInitUnicodeString(&usSymLinkName,L"\\??\\slRing0"); DbgPrint("Init driver"); if((IoCreateDevice(pDriverObject,0,&usDevName,FILE_DEVICE_UNKNOWN,0,FALSE,&pDeviceObject)) == STATUS_SUCCESS) { if((IoCreateSymbolicLink(&usSymLinkName,&usDevName)) == STATUS_SUCCESS){ pDriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; pDriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchControl; pDriverObject->DriverUnload = Unload; }else{ IoDeleteDevice(pDeviceObject); } } return STATUS_SUCCESS; } Скажите мне где здесь ошибка,а то я бьюсь и понять не могу. Выдают такую ошибку. 1>errors in directory c:\[myproject]\ring0 1>bufferoverflowk.lib(gs_support.obj) : error LNK2019: unresolved external symbol _DriverEntry@8 referenced in function _GsDriverEntry@8 1>objchk_wxp_x86\i386\ring0.sys : error LNK1120: 1 unresolved externals А ещё можно ли вообще избавиться от extern "C" или нет? А то если убираю происходит другая ошибка. 1>errors in directory c:\[myproject]\ring0 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(2156) : error C2220: warning treated as error - no object file generated 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(2156) : error C4162: '_ReturnAddress' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6902) : error C4162: '_InterlockedExchange' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6928) : error C4162: '_InterlockedIncrement' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6941) : error C4162: '_InterlockedDecrement' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6955) : error C4162: '_InterlockedExchangeAdd' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6985) : error C4162: '_InterlockedCompareExchange' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(7037) : error C4162: '_InterlockedOr' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(7047) : error C4162: '_InterlockedAnd' : no function with C linkage found 1>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(7057) : error C4162: '_InterlockedXor' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(2156) : error C2220: warning treated as error - no object file generated 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(2156) : error C4162: '_ReturnAddress' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6902) : error C4162: '_InterlockedExchange' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6928) : error C4162: '_InterlockedIncrement' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6941) : error C4162: '_InterlockedDecrement' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6955) : error C4162: '_InterlockedExchangeAdd' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(6985) : error C4162: '_InterlockedCompareExchange' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(7037) : error C4162: '_InterlockedOr' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(7047) : error C4162: '_InterlockedAnd' : no function with C linkage found 100>c:\winddk\3790.1830\inc\ddk\wxp\ntddk.h(7057) : error C4162: '_InterlockedXor' : no function with C linkage found
Спасибо. Вот допустим http://cr4sh.0x48k.cc/raw_send.rar. Там нету сточки ни одной строчки extern "C".
LavanDOS NTSTATUS __stdcall DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pusRegistryPath)
LavanDOS gilg I. если код на С++ (файл .CPP), нужно: 1) указать конвенцию вызова __stdcall, как ты правильно подметил 2) указать, что имя не должно декорироваться по правилам С++, написав extern "C" перед каждой функцией. II. если код на Си (файл .C), нужно только указать конвенцию вызова __stdcall
censored тоже вариант) тип __stdcall тоже можно задать в опциях как используемый по умолчанию вместо __cdecl. я вообще не очень люблю задавать все в аргументах комплера и предпочитаю все указывать в сорце по мере возможности.