161{
178 ULONG DiskNumber, CdRomCount, CheckSum,
i, EnabledDisks = 0;
180
181
183
184
185
186
187
188
189
190
191
192
193
194
196 GUID_DEVINTERFACE_CDROM,
197 CdRomCount,
198 &EnabledDisks);
200 {
201 NotEnabledPresent =
TRUE;
202 }
203
205
207
208
211 NextEntry = NextEntry->
Flink)
212 {
215 ListEntry);
216
217 if (
strcmp(LoaderBlock->ArcBootDeviceName, ArcDiskSignature->
ArcName) == 0)
218 {
219 break;
220 }
221
222 ArcDiskSignature =
NULL;
223 }
224
225
226 if (!ArcDiskSignature)
227 {
228 DPRINT(
"Failed finding a cd that could match current boot device\n");
230 }
231
232
235 {
236 DPRINT(
"Failed allocating resources!\n");
237
239 }
240
241
242 if (EnabledDisks > CdRomCount)
243 {
244 CdRomCount = EnabledDisks;
245 }
246
247
248 if (NotEnabledPresent && !EnabledDisks)
249 {
250 CdRomCount += 5;
251 }
252
253
254 if (!CdRomCount)
255 {
257 }
258
259
260 for (DiskNumber = 0, EnabledDisks = 0; DiskNumber < CdRomCount; DiskNumber++)
261 {
262
263 if (lSymbolicLinkList && *lSymbolicLinkList !=
UNICODE_NULL)
264 {
265
267
269
270
275
277 {
279 }
280
281
285 0,
291
293 {
294
298 }
299
300
304 {
307 }
309 {
312 }
313
314
319 {
322 }
323 }
324 else
325 {
326
331 {
333 }
334
335
341 {
344 }
345 }
346
347
349 CheckSum = 0;
353 2048,
358 {
359
363 {
366 }
367
368
370 {
371 for (
i = 0;
i < 2048 /
sizeof(
ULONG);
i++)
372 {
374 }
375 }
376 }
377
378
380
381
382 if (CheckSum + ArcDiskSignature->
CheckSum == 0)
383 {
384
385 sprintf(ArcBuffer,
"\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
389 {
390
393 DPRINT(
"Boot device found\n");
394 }
395
396
399 }
400
401
403 }
404
407 {
409 }
410
412 {
414 }
415
417}
_In_ PFCB _In_ LONGLONG StartingOffset
_In_ PCHAR _In_ ULONG DeviceNumber
_In_ PIO_STATUS_BLOCK IoStatusBlock
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
static const WCHAR Cleanup[]
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define NonPagedPoolCacheAligned
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
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
Returns a pointer to the I/O manager's global configuration information structure.
#define FILE_READ_ATTRIBUTES
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS IopFetchConfigurationInformation(_Out_ PWSTR *SymbolicLinkList, _In_ GUID Guid, _In_ ULONG ExpectedInterfaces, _Out_ PULONG Interfaces)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
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)
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)
#define IOCTL_STORAGE_GET_DEVICE_NUMBER
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
_In_ ULONG _In_ BOOLEAN _Out_ struct _DRIVE_LAYOUT_INFORMATION ** PartitionBuffer
#define ObDereferenceObject