26 #include "../../../filesystems/fs_rec/fs_rec.h" 31 #define DO_XIP 0x00020000 35 #define RAMDISK_SESSION_SIZE \ 36 FIELD_OFFSET(CDROM_TOC, TrackData) + sizeof(TRACK_DATA) 38 #define RAMDISK_TOC_SIZE \ 39 FIELD_OFFSET(CDROM_TOC, TrackData) + 2 * sizeof(TRACK_DATA) 41 #define TOC_DATA_TRACK (0x04) 64 0x80, 0xE4, 0x05, 0xF8, 0x10, 0xE7, 0xA8, 0x8A);
70 0x9E, 0xD4, 0x7D, 0x65, 0x47, 0x6C, 0xA7, 0x68);
135 ULONG MinView, DefView, MinViewLength, DefViewLength, MaxViewLength;
228 MinViewLength = 0x10000
u;
240 DefViewLength = MinViewLength;
252 MaxViewLength = DefViewLength;
285 ActualOffset.
QuadPart = DeviceExtension->DiskOffset +
Offset.QuadPart;
329 ActualOffset.
QuadPart = DeviceExtension->DiskOffset +
Offset.QuadPart;
360 WCHAR LocalBuffer[16];
367 ULONG CylinderCount, SizeByCylinders;
370 DiskType =
Input->DiskType;
377 BasePage =
Input->BasePage;
382 Input->Options.Readonly =
Input->Options.ExportAsCd |
383 Input->Options.Readonly;
441 (
Input->Options.ExportAsCd) ?
452 if (!
Input->Options.NoDosDevice)
465 L"\\GLOBAL??\\Ramdisk",
489 if (!
Input->Options.NoDriveLetter)
494 L"\\DosDevices\\%wc:",
512 *NewDriveExtension = DriveExtension;
514 DiskLength =
Input->DiskLength;
539 if (!(
Input->Options.ExportAsCd) &&
556 Heads = BiosBlock.
Heads;
584 if (
Input->Options.ExportAsCd)
605 SizeByCylinders = CylinderSize.
QuadPart * CylinderCount;
606 DriveExtension->
Cylinders = CylinderCount;
607 if ((DiskLength.
HighPart > 0) || (SizeByCylinders < DiskLength.
LowPart))
618 InsertTailList(&DeviceExtension->DiskList, &DriveExtension->DiskList);
645 PWCHAR FileNameStart, FileNameEnd;
662 DiskType =
Input->DiskType;
688 FileNameEnd =
Input->FileName + 1;
689 while ((FileNameEnd < FileNameStart) && *(FileNameEnd)) FileNameEnd++;
723 if (IoStackLocation->
Parameters.DeviceIoControl.
729 Irp->IoStatus.Information = 0;
740 Irp->IoStatus.Information = 0;
746 PartitionInfo->StartingOffset.QuadPart = DeviceExtension->BytesPerSector;
747 PartitionInfo->PartitionLength.QuadPart = DeviceExtension->BytesPerSector *
748 DeviceExtension->SectorsPerTrack *
749 DeviceExtension->NumberOfHeads *
750 DeviceExtension->Cylinders;
751 PartitionInfo->HiddenSectors = DeviceExtension->HiddenSectors;
807 Irp->IoStatus.Information = 0;
839 switch (IoStackLocation->
Parameters.DeviceIoControl.IoControlCode)
900 Irp->IoStatus.Information = 0;
907 Irp->IoStatus.Information = 0;
955 SystemVa =
Mdl->MappedSystemVa;
969 CurrentBase = SystemVa;
973 Irp->IoStatus.Information = 0;
977 CurrentOffset = IoStackLocation->
Parameters.Read.ByteOffset;
978 BytesLeft = IoStackLocation->
Parameters.Read.Length;
1016 BytesLeft = CopyLength;
1029 if (!BytesLeft)
return Status;
1039 Irp->IoStatus.Information = 1;
1106 return ReturnStatus;
1127 Irp->IoStatus.Information = 0;
1141 switch (IoStackLocation->
Parameters.DeviceIoControl.IoControlCode)
1156 IoStackLocation->
Parameters.DeviceIoControl.IoControlCode);
1163 switch (IoStackLocation->
Parameters.DeviceIoControl.IoControlCode)
1181 if (IoStackLocation->
Parameters.DeviceIoControl.
1190 DiskGeometry =
Irp->AssociatedIrp.SystemBuffer;
1207 if (IoStackLocation->
Parameters.DeviceIoControl.
1216 Toc =
Irp->AssociatedIrp.SystemBuffer;
1243 if (IoStackLocation->
Parameters.DeviceIoControl.
1301 GptInformation =
Irp->AssociatedIrp.SystemBuffer;
1306 GptInformation->
GptAttributes |= GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY;
1308 GptInformation->
GptAttributes |= GPT_BASIC_DATA_ATTRIBUTE_HIDDEN;
1310 GptInformation->
GptAttributes |= GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER;
1329 IoStackLocation->
Parameters.DeviceIoControl.IoControlCode);
1336 DPRINT1(
"IOCTL: 0x%lx is UNSUPPORTED!\n",
1337 IoStackLocation->
Parameters.DeviceIoControl.IoControlCode);
1396 sizeof(*DeviceRelations),
1398 if (DeviceRelations !=
NULL)
1403 DeviceRelations->
Count = 1;
1412 Irp->IoStatus.Information = (
ULONG_PTR)DeviceRelations;
1427 if (DeviceRelations)
1440 ListHead = &DeviceExtension->DiskList;
1441 NextEntry = ListHead->
Flink;
1442 while (NextEntry != ListHead)
1451 NextEntry = NextEntry->
Flink;
1455 FinalCount =
Count + DiskCount;
1464 if (!OurDeviceRelations)
1484 OurDeviceRelations->
Count = FinalCount;
1487 ListHead = &DeviceExtension->DiskList;
1488 NextEntry = ListHead->
Flink;
1489 while (NextEntry != ListHead)
1492 DriveDeviceObject = &OurDeviceRelations->
Objects[
Count];
1498 State = DriveExtension->State;
1516 *DriveDeviceObject++ = DriveExtension->PhysicalDeviceObject;
1522 NextEntry = NextEntry->
Flink;
1530 if (DeviceRelations)
ExFreePool(DeviceRelations);
1533 Irp->IoStatus.Information = (
ULONG_PTR)OurDeviceRelations;
1568 ListHead = &DeviceExtension->DiskList;
1569 NextEntry = ListHead->
Flink;
1570 while (NextEntry != ListHead)
1605 if (DeviceExtension->DriveDeviceName.Buffer)
1637 switch (IoStackLocation->
Parameters.QueryId.IdType)
1646 if (OutputString ==
NULL)
1652 wcsncpy(OutputString,
L"Ramdisk\\", StringLength /
sizeof(
WCHAR));
1655 wcsncat(OutputString,
L"RamVolume", StringLength /
sizeof(
WCHAR));
1659 wcsncat(OutputString,
L"RamDisk", StringLength /
sizeof(
WCHAR));
1675 if (OutputString ==
NULL)
1681 wcsncpy(OutputString,
L"Ramdisk\\", StringLength /
sizeof(
WCHAR));
1684 wcsncat(OutputString,
L"RamVolume", StringLength /
sizeof(
WCHAR));
1688 wcsncat(OutputString,
L"RamDisk", StringLength /
sizeof(
WCHAR));
1703 StringLength =
sizeof(
L"GenDisk");
1705 if (OutputString ==
NULL)
1711 wcsncpy(OutputString,
L"GenDisk", StringLength /
sizeof(
WCHAR));
1720 DriveExtension->GuidString.MaximumLength,
1722 if (OutputString ==
NULL)
1729 DriveExtension->GuidString.Buffer,
1730 DriveExtension->GuidString.MaximumLength /
sizeof(
WCHAR));
1797 DeviceTextType = IoStackLocation->
Parameters.QueryDeviceText.DeviceTextType;
1801 switch (DeviceTextType)
1806 if (OutputString ==
NULL)
1812 wcsncpy(OutputString,
L"RamDisk",
sizeof(
L"RamDisk") /
sizeof(
WCHAR));
1820 if (OutputString ==
NULL)
1826 wcsncpy(OutputString,
L"RamDisk\\0",
sizeof(
L"RamDisk\\0") /
sizeof(
WCHAR));
1848 if (PnpBusInfo ==
NULL)
1914 Irp->IoStatus.Information = 0;
1932 if (DriveExtension->DriveDeviceName.Buffer)
1934 ExFreePool(DriveExtension->DriveDeviceName.Buffer);
1941 &GUID_DEVINTERFACE_VOLUME,
1943 &DriveExtension->DriveDeviceName);
1948 &RamdiskDiskInterface,
1950 &DriveExtension->DriveDeviceName);
1956 DriveExtension->DriveDeviceName.Buffer ==
NULL)
1966 sizeof(InstallState),
2090 QueryDeviceRelations.
Type,
2093 goto ReleaseAndReturn;
2111 goto ReleaseAndReturn;
2123 if (DeviceExtension->AttachedDevice)
2149 if (DeviceExtension !=
NULL)
2157 return PoCallDriver(DeviceExtension->AttachedDevice,
Irp);
2220 if (DeviceExtension !=
NULL)
2272 Irp->IoStatus.Information = 0;
2296 Irp->IoStatus.Information = 0;
2307 Irp->IoStatus.Information = 0;
2368 &RamdiskBusInterface,
2370 &DeviceExtension->BusDeviceName);
2381 DeviceExtension->AttachedDevice = AttachedDevice;
2382 if (!AttachedDevice)
2399 DPRINT1(
"FIXME: RamdiskAddDevice is UNSUPPORTED when being started from SETUPLDR!\n");
2417 PCHAR BootDeviceName, CommandLine;
2420 DPRINT(
"RAM Disk Driver Initialized\n");
2458 if ((
strlen(BootDeviceName) >= 10) &&
2459 !(
_strnicmp(BootDeviceName,
"ramdisk(0)", 10)))
2469 if (
strstr(CommandLine,
"RDEXPORTASCD"))
2476 if (
strstr(CommandLine,
"MININT"))
2489 DPRINT1(
"FIXME: Installing from RamDisk is UNSUPPORTED!\n");
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 * u
struct _RAMDISK_EXTENSION RAMDISK_EXTENSION
#define DO_DEVICE_INITIALIZING
#define STATUS_DEVICE_ALREADY_ATTACHED
ULONG ReportDetectedDevice
ULONG MaximumPerDiskViewLength
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define STATUS_DEVICE_DOES_NOT_EXIST
NTSTATUS NTAPI RamdiskQueryDeviceRelations(IN DEVICE_RELATION_TYPE Type, IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
DEFINE_GUID(RamdiskBusInterface, 0x5DC52DF0, 0x2F8A, 0x410F, 0x80, 0xE4, 0x05, 0xF8, 0x10, 0xE7, 0xA8, 0x8A)
BOOLEAN ExportBootDiskAsCd
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
#define STATUS_DELETE_PENDING
#define FSCTL_CREATE_RAM_DISK
VOID NTAPI QueryParameters(IN PUNICODE_STRING RegistryPath)
UNICODE_STRING DriveDeviceName
#define IRP_MN_QUERY_RESOURCES
PDEVICE_OBJECT AttachedDevice
#define IRP_MN_REMOVE_DEVICE
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
ULONG MarkRamdisksAsRemovable
NTSTATUS NTAPI RamdiskQueryId(IN PRAMDISK_DRIVE_EXTENSION DriveExtension, IN PIRP Irp)
PDEVICE_OBJECT PhysicalDeviceObject
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
enum _RAMDISK_DEVICE_STATE RAMDISK_DEVICE_STATE
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
#define IRP_MJ_FLUSH_BUFFERS
#define IRP_MN_QUERY_POWER
#define STATUS_MORE_PROCESSING_REQUIRED
UNICODE_STRING SymbolicLinkName
ACPI_SIZE strlen(const char *String)
IN BOOLEAN OUT PSTR Buffer
#define IOCTL_SCSI_MINIPORT
#define IoInitializeRemoveLock(Lock, AllocateTag, MaxLockedMinutes, HighWatermark)
#define STATUS_INVALID_PARAMETER
NTSTATUS NTAPI RamdiskDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IOCTL_CDROM_CHECK_VERIFY
char * strstr(char *String1, char *String2)
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS
VOID NTAPI RamdiskUnload(IN PDRIVER_OBJECT DriverObject)
PDEVICE_OBJECT Objects[1]
struct _RAMDISK_DRIVE_EXTENSION RAMDISK_DRIVE_EXTENSION
#define IOCTL_DISK_CHECK_VERIFY
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
#define IoReleaseRemoveLock(_RemoveLock, _Tag)
NTSTATUS NTAPI RamdiskReadWriteReal(IN PIRP Irp, IN PRAMDISK_DRIVE_EXTENSION DeviceExtension)
_In_ ULONG _In_ ULONG State
#define RAMDISK_REGISTRY_DISK
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
#define STATUS_INVALID_DEVICE_REQUEST
#define IOCTL_DISK_IS_WRITABLE
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
PVOID NTAPI RamdiskMapPages(IN PRAMDISK_DRIVE_EXTENSION DeviceExtension, IN LARGE_INTEGER Offset, IN ULONG Length, OUT PULONG OutputLength)
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
PDEVICE_OBJECT PhysicalDeviceObject
#define InsertTailList(ListHead, Entry)
NTSTATUS NTAPI RamdiskQueryDeviceText(IN PRAMDISK_DRIVE_EXTENSION DriveExtension, IN PIRP Irp)
struct _PARTITION_INFORMATION PARTITION_INFORMATION
PIO_WORKITEM NTAPI IoAllocateWorkItem(IN PDEVICE_OBJECT DeviceObject)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
VOID NTAPI RamdiskUnmapPages(IN PRAMDISK_DRIVE_EXTENSION DeviceExtension, IN PVOID BaseAddress, IN LARGE_INTEGER Offset, IN ULONG Length)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
enum _DEVICE_TEXT_TYPE DEVICE_TEXT_TYPE
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
VOID NTAPI IoFreeWorkItem(IN PIO_WORKITEM IoWorkItem)
VOID FASTCALL ExReleaseFastMutex(IN PFAST_MUTEX FastMutex)
#define MDL_MAPPED_TO_SYSTEM_VA
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define STATUS_BUFFER_TOO_SMALL
RAMDISK_DEVICE_STATE State
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
struct _BootSector BootSector
#define FILE_DEVICE_CD_ROM
_In_ WDFREQUEST _In_ size_t OutputBufferLength
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
FORCEINLINE VOID IoCopyCurrentIrpStackLocationToNext(_Inout_ PIRP Irp)
_In_ PDEVICE_OBJECT DeviceObject
PVOID NTAPI MmMapLockedPagesSpecifyCache(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN MEMORY_CACHING_TYPE CacheType, IN PVOID BaseAddress, IN ULONG BugCheckOnFailure, IN ULONG Priority)
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
NTSTATUS NTAPI RamdiskQueryCapabilities(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
#define IO_DISK_INCREMENT
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
struct _SETUP_LOADER_BLOCK * SetupLdrBlock
_In_ ULONG _In_ ULONG SectorsPerTrack
#define IOCTL_VOLUME_OFFLINE
#define IRP_MN_QUERY_REMOVE_DEVICE
pRequest Complete(RequestStatus)
UNICODE_STRING GuidString
struct _RAMDISK_BUS_EXTENSION RAMDISK_BUS_EXTENSION
IO_REMOVE_LOCK RemoveLock
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
_In_ PVOID _In_ ULONG Event
struct _GET_LENGTH_INFORMATION GET_LENGTH_INFORMATION
struct _DEVICE_RELATIONS * PDEVICE_RELATIONS
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
NTSTATUS NTAPI RamdiskFlushBuffers(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define MDL_SOURCE_IS_NONPAGED_POOL
#define IoCompleteRequest
#define DeviceCapabilities
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
#define STATUS_MEDIA_WRITE_PROTECTED
#define IOCTL_DISK_GET_MEDIA_TYPES
#define IOCTL_VOLUME_SET_GPT_ATTRIBUTES
NTSTATUS NTAPI RamdiskRemoveBusDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI IoSetDeviceInterfaceState(IN PUNICODE_STRING SymbolicLinkName, IN BOOLEAN Enable)
#define RTL_REGISTRY_OPTIONAL
NTSTATUS NTAPI RamdiskAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
#define IOCTL_DISK_SET_PARTITION_INFO
PLOADER_PARAMETER_BLOCK KeLoaderBlock
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)
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size)
#define RAMDISK_BOOT_DISK
#define IOCTL_DISK_GET_LENGTH_INFO
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
enum _DEVICE_RELATION_TYPE DEVICE_RELATION_TYPE
#define IOCTL_MOUNTDEV_QUERY_STABLE_GUID
#define IRP_MN_QUERY_STOP_DEVICE
#define IOCTL_STORAGE_CHECK_VERIFY
struct _LIST_ENTRY * Flink
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
#define IOCTL_STORAGE_QUERY_PROPERTY
#define IRP_MN_SURPRISE_REMOVAL
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
UNICODE_STRING BusDeviceName
NTSTATUS NTAPI SendIrpToThread(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IRP_MN_STOP_DEVICE
#define NT_SUCCESS(StatCode)
#define STATUS_NO_SUCH_DEVICE
#define IOCTL_CDROM_GET_DRIVE_GEOMETRY
NTSTATUS NTAPI RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _RAMDISK_DRIVE_EXTENSION * PRAMDISK_DRIVE_EXTENSION
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
#define IsRecognizedPartition(PartitionType)
#define IRP_MN_START_DEVICE
_In_ ULONG _In_ struct _SET_PARTITION_INFORMATION_EX * PartitionInfo
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
#define _strnicmp(_String1, _String2, _MaxCount)
#define IRP_MN_QUERY_DEVICE_TEXT
PDEVICE_OBJECT DeviceObject
#define IRP_MJ_INTERNAL_DEVICE_CONTROL
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
VOID NTAPI RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
#define STATUS_UNSUCCESSFUL
struct _RAMDISK_EXTENSION * PRAMDISK_EXTENSION
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IRP_MN_QUERY_BUS_INFORMATION
struct _RAMDISK_CREATE_INPUT * PRAMDISK_CREATE_INPUT
NTSTATUS NTAPI RamdiskPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
#define IOCTL_DISK_GET_PARTITION_INFO
NTSTATUS NTAPI RamdiskQueryBusInformation(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define KeEnterCriticalRegion()
NTSTATUS NTAPI RamdiskCreateDiskDevice(IN PRAMDISK_BUS_EXTENSION DeviceExtension, IN PRAMDISK_CREATE_INPUT Input, IN BOOLEAN ValidateOnly, OUT PRAMDISK_DRIVE_EXTENSION *NewDriveExtension)
#define IOCTL_STORAGE_CHECK_VERIFY2
NTSTATUS NTAPI RamdiskSystemControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
_CRTIMP wchar_t *__cdecl wcsncat(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
#define IRP_MJ_SYSTEM_CONTROL
NTSTATUS NTAPI RamdiskCreateRamdisk(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN BOOLEAN ValidateOnly)
NTSTATUS NTAPI IoReportDetectedDevice(_In_ PDRIVER_OBJECT DriverObject, _In_ INTERFACE_TYPE LegacyBusType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_opt_ PCM_RESOURCE_LIST ResourceList, _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements, _In_ BOOLEAN ResourceAssigned, _Inout_ PDEVICE_OBJECT *DeviceObject)
#define IOCTL_DISK_GET_DRIVE_LAYOUT
_In_ ULONG _In_ ULONG Offset
VOID NTAPI IoQueueWorkItem(IN PIO_WORKITEM IoWorkItem, IN PIO_WORKITEM_ROUTINE WorkerRoutine, IN WORK_QUEUE_TYPE QueueType, IN PVOID Context)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
struct _DISK_GEOMETRY DISK_GEOMETRY
struct _PARTITION_INFORMATION * PPARTITION_INFORMATION
VOID NTAPI IoInvalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_RELATION_TYPE Type)
NTSTATUS NTAPI IoRegisterDeviceInterface(IN PDEVICE_OBJECT PhysicalDeviceObject, IN CONST GUID *InterfaceClassGuid, IN PUNICODE_STRING ReferenceString OPTIONAL, OUT PUNICODE_STRING SymbolicLinkName)
#define IOCTL_STORAGE_GET_MEDIA_TYPES
#define KeLeaveCriticalRegion()
#define KeInitializeEvent(pEvt, foo, foo2)
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
VOID FASTCALL ExAcquireFastMutex(IN PFAST_MUTEX FastMutex)
NTSTATUS NTAPI RamdiskReadWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define InitializeListHead(ListHead)
VOID NTAPI MmUnmapIoSpace(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define FIELD_OFFSET(t, f)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define IRP_MN_QUERY_DEVICE_RELATIONS
RAMDISK_CREATE_OPTIONS DiskOptions
enum _DEVICE_INSTALL_STATE DEVICE_INSTALL_STATE
#define IoSkipCurrentIrpStackLocation(Irp)
NTSTATUS NTAPI RamdiskScsi(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
enum _RAMDISK_DEVICE_TYPE RAMDISK_DEVICE_TYPE
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
IN PVCB IN VBO IN ULONG OUT PBCB OUT PVOID IN BOOLEAN IN BOOLEAN Zero
#define UNIMPLEMENTED_DBGBREAK(...)
_Must_inspect_result_ _Outptr_result_bytebuffer_ ViewSize PVOID * MappedBase
NTSTATUS NTAPI RamdiskSetPartitionInfo(IN PIRP Irp, IN PRAMDISK_DRIVE_EXTENSION DeviceExtension)
NTSTATUS NTAPI RamdiskOpenClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct tagContext Context
#define ObReferenceObject
NTSTATUS NTAPI RamdiskGetPartitionInfo(IN PIRP Irp, IN PRAMDISK_DRIVE_EXTENSION DeviceExtension)
TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS]
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
DEVICE_RELATION_TYPE Type
struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION VOLUME_GET_GPT_ATTRIBUTES_INFORMATION
#define FatUnpackBios(Bios, Pbios)
#define RtlCopyMemory(Destination, Source, Length)
PDEVICE_OBJECT RamdiskBusFdo
#define IoReleaseRemoveLockAndWait(_RemoveLock, _Tag)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
#define FILE_DEVICE_SECURE_OPEN
struct _RAMDISK_CREATE_INPUT RAMDISK_CREATE_INPUT
#define IOCTL_CDROM_READ_TOC
#define IRP_MN_CANCEL_STOP_DEVICE
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define FILE_DEVICE_BUS_EXTENDER
PACKED_BOOT_SECTOR * PPACKED_BOOT_SECTOR
#define ExFreePoolWithTag(_P, _T)
#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES
#define RAMDISK_MEMORY_MAPPED_DISK
NTSTATUS NTAPI RamdiskDeleteDiskDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _RAMDISK_BUS_EXTENSION * PRAMDISK_BUS_EXTENSION
#define IoAcquireRemoveLock(RemoveLock, Tag)
UNICODE_STRING DriverRegistryPath
#define IOCTL_DISK_GET_DRIVE_GEOMETRY
NTSTATUS NTAPI RamdiskIoCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
#define IRP_MN_QUERY_CAPABILITIES
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING SymbolicLinkName
#define IRP_MJ_DEVICE_CONTROL