50 ANSI_STRING ArcSystemString, ArcString, LanmanRedirector, LoaderPathNameA;
57 sprintf(
Buffer,
"\\ArcName\\%s", LoaderBlock->ArcHalDeviceName);
62 sprintf(
Buffer,
"\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
75 LoaderBlock->ArcBootDeviceName,
80 if ((SingleDisk) &&
strstr(LoaderBlock->ArcBootDeviceName,
"cdrom"))
104 sprintf(
Buffer,
"\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
188 GUID_DEVINTERFACE_CDROM,
193 NotEnabledPresent =
TRUE;
203 NextEntry = NextEntry->
Flink)
209 if (
strcmp(LoaderBlock->ArcBootDeviceName, ArcDiskSignature->
ArcName) == 0)
214 ArcDiskSignature =
NULL;
218 if (!ArcDiskSignature)
220 DPRINT(
"Failed finding a cd that could match current boot device\n");
228 DPRINT(
"Failed allocating resources!\n");
234 if (EnabledDisks > CdRomCount)
236 CdRomCount = EnabledDisks;
240 if (NotEnabledPresent && !EnabledDisks)
252 for (DiskNumber = 0, EnabledDisks = 0; DiskNumber < CdRomCount; DiskNumber++)
255 if (lSymbolicLinkList && *lSymbolicLinkList !=
UNICODE_NULL)
363 for (
i = 0;
i < 2048 /
sizeof(
ULONG);
i++)
377 sprintf(ArcBuffer,
"\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
385 DPRINT(
"Boot device found\n");
434 PDRIVE_LAYOUT_INFORMATION_EX DriveLayout =
NULL;
438 ANSI_STRING ArcBootString, ArcSystemString, DeviceStringA, ArcNameStringA, HalPathStringA;
447 GUID_DEVINTERFACE_DISK,
452 NotEnabledPresent =
TRUE;
463 if (EnabledDisks > DiskCount)
465 DiskCount = EnabledDisks;
469 if (NotEnabledPresent && !EnabledDisks)
481 for (DiskNumber = 0; DiskNumber < DiskCount; DiskNumber++)
484 if (lSymbolicLinkList && *lSymbolicLinkList !=
UNICODE_NULL)
534 if (NotEnabledPresent && *lSymbolicLinkList ==
UNICODE_NULL)
549 DiskCount = DiskNumber + 20;
555 sprintf(
Buffer,
"\\Device\\Harddisk%lu\\Partition0", DiskNumber);
689 NextEntry = NextEntry->
Flink)
701 if (((SingleDisk && DiskCount == 1) ||
733 for (
i = 1;
i <= DriveLayout->PartitionCount;
i++)
751 DPRINT(
"Found boot device\n");
773 sprintf(ArcBuffer,
"\\ArcName\\%spartition(%lu)", ArcDiskSignature->
ArcName,
i);
800 DPRINT(
"Be careful, or you have a duplicate disk signature, or a virus altered your MBR!\n");
842 WCHAR ArcNameBuffer[64];
848 sprintf(
Buffer,
"\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
870 ArcName.
Buffer = ArcNameBuffer;
949 if (!ArcDiskSignature->ValidPartitionTable)
958 if (DriveLayout->Mbr.Signature == ArcDiskSignature->Signature)
973 if (ArcDiskSignature->IsGpt &&
974 (((
PULONG)ArcDiskSignature->GptSignature)[0] == DriveLayout->Gpt.DiskId.Data1 &&
975 ((
PUSHORT)ArcDiskSignature->GptSignature)[2] == DriveLayout->Gpt.DiskId.Data2 &&
976 ((
PUSHORT)ArcDiskSignature->GptSignature)[3] == DriveLayout->Gpt.DiskId.Data3 &&
977 ((
PULONGLONG)ArcDiskSignature->GptSignature)[1] == ((
PULONGLONG)DriveLayout->Gpt.DiskId.Data4)[0]))
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
NTSTATUS NTAPI IopCreateArcNamesDisk(IN PLOADER_PARAMETER_BLOCK LoaderBlock, IN BOOLEAN SingleDisk, IN PBOOLEAN FoundBoot)
#define STATUS_INSUFFICIENT_RESOURCES
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ PFCB _In_ LONGLONG StartingOffset
NTSTATUS NTAPI NtCreateSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PUNICODE_STRING LinkTarget)
#define OBJ_CASE_INSENSITIVE
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
ACPI_SIZE strlen(const char *String)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
char * strstr(char *String1, char *String2)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG _In_opt_ PVOID Data
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
NTSTATUS NTAPI NtMakeTemporaryObject(IN HANDLE ObjectHandle)
NTSYSAPI BOOLEAN NTAPI RtlEqualString(PSTRING String1, PSTRING String2, BOOLEAN CaseInSensitive)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
BOOLEAN NTAPI IopVerifyDiskSignature(IN PDRIVE_LAYOUT_INFORMATION_EX DriveLayout, IN PARC_DISK_SIGNATURE ArcDiskSignature, OUT PULONG Signature)
#define SYMBOLIC_LINK_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
NTSTATUS NTAPI IopFetchConfigurationInformation(OUT PWSTR *SymbolicLinkList, IN GUID Guid, IN ULONG ExpectedInterfaces, IN PULONG Interfaces)
#define sprintf(buf, format,...)
_In_ PDEVICE_OBJECT DeviceObject
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PCHAR IoLoaderArcBootDeviceName
_In_ PVOID _In_ ULONG Event
_In_ ULONG _In_ BOOLEAN _Out_ struct _DRIVE_LAYOUT_INFORMATION ** PartitionBuffer
_In_z_ PCHAR TargetString
NTSYSAPI VOID NTAPI RtlCopyString(PSTRING DestinationString, PSTRING SourceString)
#define IOCTL_STORAGE_GET_DEVICE_NUMBER
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
NTSTATUS NTAPI IopCreateArcNamesCd(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
struct _LIST_ENTRY * Flink
#define NT_SUCCESS(StatCode)
#define ObDereferenceObject
UCHAR CheckSum(LPSTR p, ULONG Len)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
UNICODE_STRING IoArcBootDeviceName
NTSTATUS NTAPI IoReadPartitionTableEx(IN PDEVICE_OBJECT DeviceObject, IN PDRIVE_LAYOUT_INFORMATION_EX *DriveLayout)
#define FILE_READ_ATTRIBUTES
#define ExAllocatePoolWithTag(hernya, size, tag)
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
BOOLEAN ValidPartitionTable
static const WCHAR Cleanup[]
#define KeInitializeEvent(pEvt, foo, foo2)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
#define IoAssignArcName(_ArcName, _DeviceName)
static OUT PIO_STATUS_BLOCK IoStatusBlock
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI IopCreateArcNames(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
NTSTATUS NTAPI IopReassignSystemRoot(IN PLOADER_PARAMETER_BLOCK LoaderBlock, OUT PANSI_STRING NtBootPath)
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
VOID NTAPI IopStoreSystemPartitionInformation(IN PUNICODE_STRING NtSystemPartitionDeviceName, IN PUNICODE_STRING OsLoaderPathName)
int strcmp(const char *String1, const char *String2)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
VOID FASTCALL HalExamineMBR(IN PDEVICE_OBJECT DeviceObject, IN ULONG SectorSize, IN ULONG MbrTypeIdentifier, OUT PVOID *MbrBuffer)
#define InitializeObjectAttributes(p, n, a, r, s)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
#define RtlCopyMemory(Destination, Source, Length)
#define ExFreePoolWithTag(_P, _T)
_In_ PCHAR _In_ ULONG DeviceNumber
UNICODE_STRING IoArcHalDeviceName
static const WCHAR Signature[]
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
BOOLEAN IoRemoteBootClient