#define NDEBUG
#include <internal/debug.h>
+#ifdef LIBCAPTIVE
+#include <glib/gmessages.h>
+#endif /* LIBCAPTIVE */
+
/* GLOBALS *******************************************************************/
LIST_ENTRY ModuleListHead;
RtlCreateUnicodeString(&DeviceNode->ServiceName, Buffer);
Status = IopInitializeDriver(ModuleObject->EntryPoint,
- DeviceNode, FALSE);
+ DeviceNode, FALSE,
+ ModuleObject->Base,
+ ModuleObject->Length);
if (!NT_SUCCESS(Status))
{
IopFreeDeviceNode(DeviceNode);
PLIST_ENTRY current_entry;
PMODULE_OBJECT current;
ULONG ModuleCount = 0;
- PSYSTEM_MODULES Smi;
+ PSYSTEM_MODULE_INFORMATION Smi;
ANSI_STRING AnsiName;
PCHAR p;
KIRQL Irql;
current_entry = current_entry->Flink;
}
- *ReqSize = sizeof(SYSTEM_MODULES)+
- (ModuleCount - 1) * sizeof(SYSTEM_MODULE_INFORMATION);
+ *ReqSize = sizeof(SYSTEM_MODULE_INFORMATION)+
+ (ModuleCount - 1) * sizeof(SYSTEM_MODULE_INFORMATION_ENTRY);
if (Size < *ReqSize)
{
/* fill the buffer */
memset(Buffer, '=', Size);
- Smi = (PSYSTEM_MODULES)Buffer;
+ Smi = (PSYSTEM_MODULE_INFORMATION)Buffer;
Smi->Count = ModuleCount;
ModuleCount = 0;
{
current = CONTAINING_RECORD(current_entry,MODULE_OBJECT,ListEntry);
- Smi->Modules[ModuleCount].Reserved[0] = 0; /* Always 0 */
- Smi->Modules[ModuleCount].Reserved[1] = 0; /* Always 0 */
- Smi->Modules[ModuleCount].Base = current->Base;
- Smi->Modules[ModuleCount].Size = current->Length;
- Smi->Modules[ModuleCount].Flags = 0; /* Flags ??? (GN) */
- Smi->Modules[ModuleCount].Index = ModuleCount;
- Smi->Modules[ModuleCount].Unknown = 0;
- Smi->Modules[ModuleCount].LoadCount = 0; /* FIXME */
+ Smi->Module[ModuleCount].Unknown1 = 0; /* Always 0 */
+ Smi->Module[ModuleCount].Unknown2 = 0; /* Always 0 */
+ Smi->Module[ModuleCount].Base = current->Base;
+ Smi->Module[ModuleCount].Size = current->Length;
+ Smi->Module[ModuleCount].Flags = 0; /* Flags ??? (GN) */
+ Smi->Module[ModuleCount].Index = ModuleCount;
+ Smi->Module[ModuleCount].NameLength = 0;
+ Smi->Module[ModuleCount].LoadCount = 0; /* FIXME */
AnsiName.Length = 0;
AnsiName.MaximumLength = 256;
- AnsiName.Buffer = Smi->Modules[ModuleCount].ImageName;
+ AnsiName.Buffer = Smi->Module[ModuleCount].ImageName;
RtlUnicodeStringToAnsiString(&AnsiName,
¤t->FullName,
FALSE);
p = strrchr(AnsiName.Buffer, '\\');
if (p == NULL)
{
- Smi->Modules[ModuleCount].ModuleNameOffset = 0;
+ Smi->Module[ModuleCount].PathLength = 0;
}
else
{
p++;
- Smi->Modules[ModuleCount].ModuleNameOffset = p - AnsiName.Buffer;
+ Smi->Module[ModuleCount].PathLength = p - AnsiName.Buffer;
}
ModuleCount++;
if (ExportAddress == NULL)
{
- CPRINT("Export not found for %d:%s\n",
+ DbgPrint("Export not found for %d:%s\n",
Hint,
Name != NULL ? Name : "(Ordinal)");
- KeBugCheck(0);
+#ifdef LIBCAPTIVE
+ g_error("Please check the versions of \"ntfs.sys\" and \"ntoskrnl.exe\" - do they match each other?\n"
+ "Because export not found for: %d:%s",Hint,(Name ? Name : "(Ordinal)"));
+#endif /* LIBCAPTIVE */
+ KEBUGCHECK(0);
}
return(ExportAddress);
ps("Export not found for %d:%s\n",
Hint,
Name != NULL ? Name : "(Ordinal)");
- KeBugCheck(0);
+ KEBUGCHECK(0);
}
return ExportAddress;
}