Плин, второй день вожусь, не могу сделать что б мое полено грузилось динамически......
Весь проект изгадил, не знаю как востанавливать буду.......
вот ошметки проекта.....
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObj,
PUNICODE_STRING RegistryPath) {
NTSTATUS code = STATUS_SUCCESS;
DbgPrint("\n" DRIVER_NAME " %s %s\n",__DATE__, __TIME__);
#if defined(ALLOW_ENTRY_INIT)
code = DriverInitialize(DriverObj,RegistryPath);
#endif
//DriverObj->MajorFunction[IRP_MJ_CREATE] = CreateClose;
//DriverObj->MajorFunction[IRP_MJ_CLOSE] = CreateClose;
//DriverObj->MajorFunction[IRP_MJ_READ] = ReadControl;
//DriverObj->MajorFunction[IRP_MJ_WRITE] = WriteControl;
DriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceControl;
DriverObj->MajorFunction[IRP_MJ_PNP] = PnpControl;
DriverObj->DriverExtension->AddDevice = AddDevice;
DriverObj->DriverUnload = Unload;
#if DBG
DbgPrint(DRIVER_NAME "DriverEntry: Leaving\n");
#endif
return(code);
}
DeviceControl, AddDevice не вызывается при загрузке по этому не важно что там...
так...
PnpControl - подставлял его идиотский обработчик пнп. Результат нулевой.
DriverInitialize такой
#if defined(ALLOW_ENTRY_INIT)
NTSTATUS DriverInitialize(PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING pusRegistryPath) {
PDEVICE_OBJECT pDeviceObject = NULL;
NTSTATUS ns = STATUS_DEVICE_CONFIGURATION_ERROR;
UNICODE_STRING usDeviceName, usSymbolicLinkName;
P_DEVICE_EXT devExt;
DbgPrint("DriverInitialize() Entry\n");
RtlInitUnicodeString(&usDeviceName, DeviceName);
RtlInitUnicodeString(&usSymbolicLinkName, SymbolicLinkName);
ns = IoCreateDevice(pDriverObject,
sizeof(_DEVICE_EXT),
&usDeviceName,
FILE_DEVICE_CUSTOM,0,FALSE,
&pDeviceObject);
if (!NT_SUCCESS(ns)) {
DbgPrint("Unable create device!\n");
return ns;
}
ns = IoCreateSymbolicLink(&usSymbolicLinkName, &usDeviceName);
if (!NT_SUCCESS(ns)) {
DbgPrint("Unable create symbolic link!\n");
IoDeleteDevice(pDeviceObject);
return(ns);
}
gpDeviceObject = pDeviceObject;
devExt = pDeviceObject->DeviceExtension;
devExt->DriverObject = pDriverObject;
devExt->DeviceObject = pDeviceObject;
#if defined(DBG)
DbgPrint("DriverInitialize() Leaving\n");
#endif
return ns;
}
#endif /* ALLOW_ENTRY_INIT */
по ходу все аналочично......
00000000 0.00000000
00000001 0.00000922 Sep 28 2003 10:59:26
00000002 0.00007543 DriverInitialize() Entry
00000003 0.00028914 DriverInitialize() Leaving
00000004 0.00033440 DriverEntry: Leaving
00000005 0.00223352 Unload: Starting
00000006 0.00241539 Unload: Leaving
Загружается и тут же выгружается...
StartService не идет ERROR_SERVICE_DISABLED
Блин, его драйвер грузится, а мой - нет......
Может тут по ходу опцию линкеру дать, как было для VxD (ну ващето там не совсем опция была=)))?
Подставлял его опции линкеру и опции (вкладки С/С++ и Link)
И ваще, его тулз какой та кривой, чета не правильно удаляется запись из SCM, такое ощущение, что они загружаются и после ребута...
Меня бесит его мения многократных вложенностей вызовов.....он о стеке задумывается???
Будь ты проклят, шрайбер!