NTSTATUS SysLoad(const WCHAR *wcsFileName)
{
SYSTEM_GDI_DRIVER_INFORMATION gdiinfo;
NTSTATUS ns;
PDRIVER_OBJECT pBeepObj;
RtlZeroMemory(&gdiinfo,sizeof(SYSTEM_GDI_DRIVER_INFORMATION));
RtlInitUnicodeString(&gdiinfo.DriverName,wcsFileName);
ns=ZwSetSystemInformation(SystemLoadGdiDriverInSystemSpace,&gdiinfo,sizeof(SYSTEM_GDI_DRIVER_INFORMATION));
if
(NT_SUCCESS(ns))
{
PDRIVER_INITIALIZE InitRoutine;
UNICODE_STRING pRegPath;
UNICODE_STRING NameBuffer;
UNICODE_STRING DevName;
WCHAR buffer[60];
InitRoutine = (PDRIVER_INITIALIZE)gdiinfo.EntryPoint;
if
(InitRoutine)
{
PDRIVER_OBJECT pDriverObject;
_snwprintf(buffer, (sizeof(buffer) / sizeof(WCHAR)) - 1, L
"\\Driver\\%08u"
, PsGetCurrentThreadId());
RtlInitUnicodeString(&NameBuffer,buffer);
RtlInitUnicodeString(&DevName, L
"\\Driver\\Beep"
);
RtlInitUnicodeString(&pRegPath,wcsFileName);
ns = ObReferenceObjectByName(&DevName, OBJ_CASE_INSENSITIVE, NULL,
0, *IoDriverObjectType, KernelMode, NULL, &pBeepObj);
if
(NT_SUCCESS(ns))
{
ns=MakeFakeDriverObject(&NameBuffer,&pDriverObject);
if
(NT_SUCCESS(ns))
{
pDriverObject->DriverStart=InitRoutine;
pDriverObject->DriverInit=InitRoutine;
pDriverObject->DriverSection=pBeepObj->DriverSection;
pDriverObject->DriverSize=gdiinfo.ImageLength;
ns= InitRoutine(pDriverObject,&pRegPath);
}
}
}
}
return
ns;
}