阅读:3110回复:3
刚学驱动不知这个问题怎么改
d:\hellowdm.obj() : error LNK2019: unresolved external symbol "unsigned long __cdecl DbgPrint(char *,...)" (?DbgPrint@@YAKPADZZ) referenced in function _DriverEntry@8
d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) long __stdcall IoDeleteSymbolicLink(struct _UNICODE_STRING *)" (__imp_?IoDeleteSymbolicLink@@YGJPAU_UNICODE_STRING@@@Z) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) long __stdcall IoCreateSymbolicLink(struct _UNICODE_STRING *,struct _UNICODE_STRING *)" (__imp_?IoCreateSymbolicLink@@YGJPAU_UNICODE_STRING@@0@Z) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) struct _DEVICE_OBJECT * __stdcall IoAttachDeviceToDeviceStack(struct _DEVICE_OBJECT *,struct _DEVICE_OBJECT *)" (__imp_?IoAttachDeviceToDeviceStack@@YGPAU_DEVICE_OBJECT@@PAU1@0@Z) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) long __stdcall IoCreateDevice(struct _DRIVER_OBJECT *,unsigned long,struct _UNICODE_STRING *,unsigned long,unsigned long,unsigned char,struct _DEVICE_OBJECT * *)" (__imp_?IoCreateDevice@@YGJPAU_DRIVER_OBJECT@@KPAU_UNICODE_STRING@@KKEPAPAU_DEVICE_OBJECT@@@Z) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) void __stdcall RtlInitUnicodeString(struct _UNICODE_STRING *,unsigned short const *)" (__imp_?RtlInitUnicodeString@@YGXPAU_UNICODE_STRING@@PBG@Z) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) void __stdcall RtlAssert(void *,void *,unsigned long,char *)" (__imp_?RtlAssert@@YGXPAX0KPAD@Z) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) unsigned char __stdcall KeGetCurrentIrql(void)" (__imp_?KeGetCurrentIrql@@YGEXZ) referenced in function "long __stdcall HelloWDMAddDevice(struct _DRIVER_OBJECT *,struct _DEVICE_OBJECT *)" (?HelloWDMAddDevice@@YGJPAU_DRIVER_OBJECT@@PAU_DEVICE_OBJECT@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) long __fastcall IofCallDriver(struct _DEVICE_OBJECT *,struct _IRP *)" (__imp_?IofCallDriver@@YIJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z) referenced in function "long __stdcall DefaultPnpHandler(struct _DEVICE_EXTENSION *,struct _IRP *)" (?DefaultPnpHandler@@YGJPAU_DEVICE_EXTENSION@@PAU_IRP@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) void __stdcall IoDeleteDevice(struct _DEVICE_OBJECT *)" (__imp_?IoDeleteDevice@@YGXPAU_DEVICE_OBJECT@@@Z) referenced in function "long __stdcall HandleRemoveDevice(struct _DEVICE_EXTENSION *,struct _IRP *)" (?HandleRemoveDevice@@YGJPAU_DEVICE_EXTENSION@@PAU_IRP@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) void __stdcall IoDetachDevice(struct _DEVICE_OBJECT *)" (__imp_?IoDetachDevice@@YGXPAU_DEVICE_OBJECT@@@Z) referenced in function "long __stdcall HandleRemoveDevice(struct _DEVICE_EXTENSION *,struct _IRP *)" (?HandleRemoveDevice@@YGJPAU_DEVICE_EXTENSION@@PAU_IRP@@@Z) d:\hellowdm.obj() : error LNK2019: unresolved external symbol "__declspec(dllimport) void __fastcall IofCompleteRequest(struct _IRP *,char)" (__imp_?IofCompleteRequest@@YIXPAU_IRP@@D@Z) referenced in function "long __stdcall HelloWDMDispatchRoutine(struct _DEVICE_OBJECT *,struct _IRP *)" (?HelloWDMDispatchRoutine@@YGJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z) d:\objchk\i386\hellowdm.sys() : error LNK1120: 12 unresolved externals 另附源码 头文件: #ifdef _cplusplus extern "C" { #endif #include <wdm.h> #ifdef _cplusplus } #endif typedef struct _DEVICE_EXTENSION{ PDEVICE_OBJECT fdo; PDEVICE_OBJECT NextStackDevice; UNICODE_STRING ustrDeviceName; UNICODE_STRING ustrSymLinkName; }DEVICE_EXTENSION,*PDEVICE_EXTENSION; #define PAGEDCODE code_seg("PAGE") #define LOCKEDCODE code_seg() #define INITCODE code_seg("INIT") #define PAGEDDATA data_seg("PAGE") #define LOCKEDDATA data_seg() #define INITDATA data_seg("INIT") #define arraysize(p) (sizeof(p)/sizeof((p)[0])) NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject); NTSTATUS HelloWDMPnp(IN PDEVICE_OBJECT fdo, IN PIRP Irp); NTSTATUS HelloWDMDispatchRoutine(IN PDEVICE_OBJECT fdo, IN PIRP Irp); void HelloWDMUnload(IN PDRIVER_OBJECT DriverObject); extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath); 源文件: #include "HelloWDM.h" #pragma INITCODE extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) { KdPrint(("Enter DriverEntry\n")); pDriverObject->DriverExtension->AddDevice=HelloWDMAddDevice; pDriverObject->MajorFunction[IRP_MJ_PNP]=HelloWDMPnp; pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = pDriverObject->MajorFunction[IRP_MJ_CREATE] = pDriverObject->MajorFunction[IRP_MJ_READ] = pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMDispatchRoutine; pDriverObject->DriverUnload=HelloWDMUnload; KdPrint(("Leave DriverEntry\n")); return STATUS_SUCCESS; } #pragma PAGEDCODE NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject) { PAGED_CODE(); KdPrint(("Enter HelloWDMAddDevice\n")); NTSTATUS status; PDEVICE_OBJECT fdo; UNICODE_STRING devName; RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice"); status=IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), &(UNICODE_STRING)devName, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo); if(!NT_SUCCESS(status))return status; PDEVICE_EXTENSION pdx=(PDEVICE_EXTENSION)fdo->DeviceExtension; pdx->fdo=fdo; pdx->NextStackDevice=IoAttachDeviceToDeviceStack(fdo,PhysicalDeviceObject); UNICODE_STRING SymLinkName; RtlInitUnicodeString(&SymLinkName,L"\\DosDevices\\HelloWDM"); pdx->ustrDeviceName=devName; pdx->ustrSymLinkName=SymLinkName; status=IoCreateSymbolicLink(&(UNICODE_STRING)SymLinkName, &(UNICODE_STRING)devName); if(!NT_SUCCESS(status)) { IoDeleteSymbolicLink(&pdx->ustrSymLinkName); status=IoCreateSymbolicLink(&SymLinkName, &devName); if(!NT_SUCCESS(status)) { return status; } } fdo->Flags|=DO_BUFFERED_IO|DO_POWER_PAGABLE; fdo->Flags&=~DO_DEVICE_INITIALIZING; KdPrint(("Leave HelloWDMAddDevice\n")); return STATUS_SUCCESS; } #pragma PAGEDCODE NTSTATUS DefaultPnpHandler(PDEVICE_EXTENSION pdx,PIRP Irp) { PAGED_CODE(); KdPrint(("Enter DefaultPnpHandler\n")); IoSkipCurrentIrpStackLocation(Irp); KdPrint(("Leave DefaultPnpHandler\n")); return IoCallDriver(pdx->NextStackDevice,Irp); } #pragma PAGEDCODE NTSTATUS HandleRemoveDevice(PDEVICE_EXTENSION pdx,PIRP Irp) { PAGED_CODE(); KdPrint(("Enter HandleRemoveDevice\n")); Irp->IoStatus.Status=STATUS_SUCCESS; NTSTATUS status=DefaultPnpHandler(pdx,Irp); IoDeleteSymbolicLink(&(UNICODE_STRING)pdx->ustrSymLinkName); if(pdx->NextStackDevice) IoDetachDevice(pdx->NextStackDevice); IoDeleteDevice(pdx->fdo); KdPrint(("Leave HandleRemoveDevice\n")); return status; } #pragma PAGEDCODE NTSTATUS HelloWDMPnp(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { PAGED_CODE(); KdPrint(("Enter HelloWDMPnp\n")); NTSTATUS status=STATUS_SUCCESS; PDEVICE_EXTENSION pdx=(PDEVICE_EXTENSION)fdo->DeviceExtension; PIO_STACK_LOCATION stack=IoGetCurrentIrpStackLocation(Irp); static NTSTATUS (*fcntab[])(PDEVICE_EXTENSION pdx,PIRP Irp)= { DefaultPnpHandler, DefaultPnpHandler, HandleRemoveDevice, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, DefaultPnpHandler, }; ULONG fcn=stack->MinorFunction; if(fcn>=arraysize(fcntab)) { status=DefaultPnpHandler(pdx,Irp); return status; } #if DBG static char *fcnname[]= { "IRP_MN_START_DEVICE", "IRP_MN_QUERY_REMOVE_DEVICE", "IRP_MN_REMOVE_DEVICE", "IRP_MN_CANCEL_REMOVE_DEVICE", "IRP_MN_STOP_DEVICE", "IRP_MN_QUERY_STOP_DEVICE", "IRP_MN_CANCEL_STOP_DEVICE", "IRP_MN_QUERY_DEVICE_RELATIONS", "IRP_MN_QUERY_INTERFACE", "IRP_MN_QUERY_CAPABILITIES", "IRP_MN_QUERY_RESOURCES", "IRP_MN_QUERY_RESOURCE_REQUIREMENTS", "IRP_MN_QUERY_DEVICE_TEXT", "IRP_MN_FILTER_RESOURCE_REQUIREMENTS", "", "IRP_MN_READ_CONFIG", "IRP_MN_WRITE_CONFIG", "IRP_MN_EJECT", "IRP_MN_SET_LOCK", "IRP_MN_QUERY_ID", "IRP_MN_QUERY_PNP_DEVICE_STATE", "IRP_MN_QUERY_BUS_INFORMATION", "IRP_MN_DEVICE_USAGE_NOTIFICATION", "IRP_MN_SURPRISE_REMOVAL", }; KdPrint(("PNP Request (%s)\n",fcnname[fcn])); #endif status=(*fcntab[fcn])(pdx,Irp); KdPrint(("Leave HelloWDMPnp\n")); return status; } #pragma PAGEDCODE NTSTATUS HelloWDMDispatchRoutine(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { PAGED_CODE(); KdPrint(("Enter HelloWDMDispatchRoutine\n")); Irp->IoStatus.Status=STATUS_SUCCESS; Irp->IoStatus.Information=0; IoCompleteRequest(Irp,IO_NO_INCREMENT); KdPrint(("Leave HelloWDMDispatchRoutine\n")); return STATUS_SUCCESS; } #pragma PAGEDCODE void HelloWDMUnload(IN PDRIVER_OBJECT DriverObject) { PAGED_CODE(); KdPrint(("Enter HelloWDMUnload\n")); KdPrint(("Leave HelloWDMUnload\n")); } sources文件: TARGETNAME=HelloWDM TARGETTYPE=DRIVER DRIVERTYPE=WDM TARGETPATH=OBJ INCLUDES=$(BASEDIR)\inc;\ $(BASEDIR)\inc\ddk;\ SOURCES=HelloWDM.cpp\ 望大牛看看 |
|
沙发#
发布于:2010-03-03 13:13
这个问题,明显是基础不扎实,代码没错,但是sources文件有错,没有指明要连接的库,当然link不了了
|
|
|
板凳#
发布于:2010-03-03 13:30
已解决 sources没错
将头文件中的 #ifdef _cplusplus extern "C" { #endif #include <wdm.h> #ifdef _cplusplus } #endif 改为 #ifdef __cplusplus 这里是两个下划线 extern "C" { #endif #include <wdm.h> #ifdef __cplusplus 这里是下划线 } #endif 即可 |
|
地板#
发布于:2010-03-03 13:32
不过还是谢谢znsoft
|
|