RawInitialize
NTSTATUS __stdcall RawInitialize(_DRIVER_OBJECT *DriverObject, _UNICODE_STRING *RegistryPath){
NTSTATUS result;
int v4;
INT64 v5;
INT64 v6;
INT64 v7;
INT64 v8;
INT64 v9;
INT64 v10;
UINT64 v11;
UINT64 v12;
UINT64 v13;
_UNICODE_STRING DestinationString;
DestinationString = 0i64;
RtlInitUnicodeString(&DestinationString, L"\\Device\\RawDisk");
LODWORD(v11) = 0;
result = IoCreateDevice(DriverObject, 0i64, &DestinationString, 8ui64, v11, 0, &RawDeviceDiskObject);
if( result >= 0 )
{
DriverObject->DriverUnload = (void(__fastcall *)(_DRIVER_OBJECT *))RawUnload;
RtlInitUnicodeString(&DestinationString, L"\\Device\\RawCdRom");
LODWORD(v12) = 0;
v4 = IoCreateDevice(DriverObject, 0i64, &DestinationString, 3ui64, v12, 0, &RawDeviceCdRomObject);
if( v4 >= 0 )
{
RtlInitUnicodeString(&DestinationString, L"\\Device\\RawTape");
LODWORD(v13) = 0;
v4 = IoCreateDevice(DriverObject, 0i64, &DestinationString, 0x20ui64, v13, 0, &RawDeviceTapeObject);
if( v4 >= 0 )
{
v4 = IoRegisterShutdownNotification(RawDeviceTapeObject);
if( v4 >= 0 )
{
RawDeviceDiskObject->Flags |= 0x10u;
RawDeviceCdRomObject->Flags |= 0x10u;
RawDeviceTapeObject->Flags |= 0x10u;
DriverObject->MajorFunction[9] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[27] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[14] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[13] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[10] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[6] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[5] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[4] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[3] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[2] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[18] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[0] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawDispatch;
DriverObject->MajorFunction[16] = (int(__fastcall *)(_DEVICE_OBJECT *, _IRP *))RawShutdown;
IoRegisterFileSystem((UINT64)RawDeviceDiskObject, v5, v6);
IoRegisterFileSystem((UINT64)RawDeviceCdRomObject, v7, v8);
IoRegisterFileSystem((UINT64)RawDeviceTapeObject, v9, v10);
ObfReferenceObject(RawDeviceDiskObject);
ObfReferenceObject(RawDeviceCdRomObject);
ObfReferenceObject(RawDeviceTapeObject);
RawGlobalLock.Owner = 0i64;
RawGlobalLock.Contention = 0;
*(_DWORD *)&RawGlobalLock.gap14[8] = 0;
qword_140C1DCF8 = (__int64)&RawMountedQueue;
RawMountedQueue = (__int64)&RawMountedQueue;
qword_140C1DCE8 = (__int64)&RawDismountedQueue;
RawDismountedQueue = (__int64)&RawDismountedQueue;
*(_QWORD *)&RawGlobalLock.gap14[20] = &RawGlobalLock.gap14[12];
*(_QWORD *)&RawGlobalLock.gap14[12] = &RawGlobalLock.gap14[12];
result = 0;
RawGlobalLock.Count = 1;
*(_WORD *)&RawGlobalLock.gap14[4] = 1;
RawGlobalLock.gap14[6] = 6;
return result;
}
IoDeleteDevice(RawDeviceTapeObject);
}
IoDeleteDevice(RawDeviceCdRomObject);
}
IoDeleteDevice(RawDeviceDiskObject);
return v4;
}
return result;
}Referenced by:
No references.