il0dbg
Сообщений: 66
Оценки: 0
Присоединился: 2007-10-30 01:32:31.366666
|
Постым русским языком объясню: NTSTATUS IrpPass(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp ) { IoSkipCurrentIrpStackLocation(pIrp); return IoCallDriver(((PDEVICE_EXTENSION) pDeviceObject->DeviceExtension)->TopOfStack ,pIrp); } extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING theRegistryPath) { pDriverObject->DriverUnload=OnUnload; for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) pDriverObject->MajorFunction = IrpPass; UNICODE_STRING dname; WCHAR dname_c[]=L"\\Device\\xxx"; RtlInitUnicodeString(&dname,dname_c); NTSTATUS st=IoCreateDevice(pDriverObject, sizeof(DEVICE_EXTENSION), &dname, FILE_DEVICE_NETWORK, 0, true, &pkk); if(!NT_SUCCESS(st)) return st; pkk->Flags=0x50; RtlZeroMemory(pkk->DeviceExtension,sizeof(DEVICE_EXTENSION)); PDEVICE_EXTENSION pkkext=(PDEVICE_EXTENSION)pkk->DeviceExtension; UNICODE_STRING adname; WCHAR adname_c[]=L"\\Device\\Tcp"; RtlInitUnicodeString(&adname,adname_c); IoAttachDevice(pkk,&adname,&pkkext->TopOfStack); return STATUS_SUCCESS; } В IRP_MJ калбэке посмотри где чаще через глобальную переменную, еще DEVICE_EXTENSION подскажу, а тоо все сним мучаются: typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT TopOfStack; HANDLE ThreadHandle; KEVENT EventPress; BOOLEAN TerminateThread; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; И почитай roorkit.com, там много по этой теме есть
|