15 #pragma alloc_text(PAGE, VfdCreateDevice) 16 #pragma alloc_text(PAGE, VfdDeleteDevice) 17 #endif // ALLOC_PRAGMA 31 WCHAR name_buffer[40];
38 VFDTRACE(VFDINFO | VFDDEV, (
"[VFD] VfdCreateDevice - IN\n"));
53 if (driver_extension ==
NULL) {
54 VFDTRACE(VFDERR, (
"[VFD] Failed to get the driver extension\n"));
68 _snwprintf(name_buffer,
sizeof(name_buffer) - 1,
69 L"\\Device\\Floppy%lu", physical_num);
74 L"\\Device\\Floppy%lu", physical_num);
93 while (++physical_num < 100);
97 (
"[VFD] IoCreateDevice() %s\n",
105 (
"[VFD] Created a device object %ws\n", name_buffer));
129 (
"[VFD] Failed to allocate device name buffer\n"));
143 _snwprintf(name_buffer,
sizeof(name_buffer) - 1,
161 (
"[VFD] IoCreateSymbolicLink(%ws) %s\n",
162 name_buffer, GetStatusName(
status)));
167 (
"[VFD] Created a symbolic link %ws\n", name_buffer));
195 (
"[VFD] PsCreateSystemThread() %s\n",
214 (
"[VFD] ObReferenceObjectByHandle() %s\n",
246 VFDTRACE(VFDINFO | VFDDEV, (
"[VFD] VfdCreateDevice - OK\n"));
271 (
"[VFD] Deleting symbolic link %ws\n", name_buffer));
276 VFDTRACE(VFDINFO|VFDDEV, (
"[VFD] Deleting device %ws\n",
286 (
"[VFD] VfdCreateDevice - %s\n",
302 WCHAR name_buffer[40];
304 VFDTRACE(VFDINFO|VFDDEV, (
"[VFD] VfdDeleteDevice - IN\n"));
318 if (driver_extension) {
373 _snwprintf(name_buffer,
sizeof(name_buffer) - 1,
387 (
"[VFD] Deleting link %ws\n", name_buffer));
394 #ifdef VFD_MOUNT_MANAGER 403 #endif // VFD_MOUNT_MANAGER 415 (
"[VFD] Deleting device %ws\n",
427 (
"[VFD] VfdDeleteDevice - OUT\n"));
#define DO_DEVICE_INITIALIZING
#define STATUS_OBJECT_NAME_COLLISION
VOID NTAPI VfdDeviceThread(IN PVOID ThreadContext)
#define THREAD_ALL_ACCESS
#define STATUS_INSUFFICIENT_RESOURCES
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
NTSTATUS VfdLoadLink(IN PDEVICE_EXTENSION DeviceExtension, IN PWSTR RegistryPath)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
struct _device_extension device_extension
VOID VfdDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define STATUS_OBJECT_NAME_EXISTS
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
NTSTATUS VfdCreateDevice(IN PDRIVER_OBJECT DriverObject, OUT PVOID Parameter)
_In_ PDEVICE_OBJECT DeviceObject
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define SeDeleteClientSecurity(C)
#define FILE_REMOVABLE_MEDIA
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
#define NT_SUCCESS(StatCode)
#define ObDereferenceObject
PWSTR VfdCopyUnicode(PUNICODE_STRING dst, PUNICODE_STRING src)
#define VFDTRACE(LEVEL, STRING)
#define STATUS_DRIVER_INTERNAL_ERROR
NTSTATUS VfdSetLink(IN PDEVICE_EXTENSION DeviceExtension, IN CHAR DriveLetter)
const DISK_GEOMETRY geom_tbl[VFD_MEDIA_MAX]
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define KeInitializeEvent(pEvt, foo, foo2)
#define InitializeListHead(ListHead)
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
UNICODE_STRING RegistryPath
struct _VFD_DRIVER_EXTENSION * PVFD_DRIVER_EXTENSION
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)
char * cleanup(char *str)
#define FILE_DEVICE_SECURE_OPEN
#define FILE_FLOPPY_DISKETTE
static SERVICE_STATUS status
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
#define VFD_DEVICE_BASENAME