26{
29
31 WCHAR name_buffer[40];
32
37
38 VFDTRACE(VFDINFO | VFDDEV, (
"[VFD] VfdCreateDevice - IN\n"));
39
40#ifdef VFD_PNP
41
42
45
46#else
47
48
50
51#endif
52
53 if (driver_extension ==
NULL) {
54 VFDTRACE(VFDERR, (
"[VFD] Failed to get the driver extension\n"));
56 }
57
58
59
60
61
62 physical_num = 0;
63
64 do {
65#ifndef __REACTOS__
67
68 _snwprintf(name_buffer,
sizeof(name_buffer) - 1,
69 L"\\Device\\Floppy%lu", physical_num);
70#else
72
74 L"\\Device\\Floppy%lu", physical_num);
75#endif
76
78
82 &unicode_name,
86 &device_object);
87
90 break;
91 }
92 }
93 while (++physical_num < 100);
94
97 ("[VFD] IoCreateDevice() %s\n",
100 }
101
103
105 ("[VFD] Created a device object %ws\n", name_buffer));
106
107
108
109
110
112
114
116
117
118
120
121
122
124
125
126
129 ("[VFD] Failed to allocate device name buffer\n"));
132 }
133
134
135
137
138
139
140#ifndef __REACTOS__
142
143 _snwprintf(name_buffer,
sizeof(name_buffer) - 1,
146#else
148
152#endif
153
155
158
161 ("[VFD] IoCreateSymbolicLink(%ws) %s\n",
162 name_buffer, GetStatusName(
status)));
164 }
165
167 ("[VFD] Created a symbolic link %ws\n", name_buffer));
168
169
170
172
174
179
180
181
183
185 &thread_handle,
191 device_object);
192
195 ("[VFD] PsCreateSystemThread() %s\n",
198 }
199
200
201
203 thread_handle,
209
211
214 ("[VFD] ObReferenceObjectByHandle() %s\n",
217 }
218
219
220
221
225
226 }
227
228
229
231
233
234 device_object->
Flags &= ~DO_DEVICE_INITIALIZING;
235 }
236
237#ifdef VFD_PNP
239
241 }
242#else
244#endif
245
246 VFDTRACE(VFDINFO | VFDDEV, (
"[VFD] VfdCreateDevice - OK\n"));
247
249
251
252
253
254
255 if (thread_handle) {
256
257
259
264
267 }
268 }
269
271 ("[VFD] Deleting symbolic link %ws\n", name_buffer));
272
274
276 VFDTRACE(VFDINFO|VFDDEV, (
"[VFD] Deleting device %ws\n",
278
280 }
281
284
286 ("[VFD] VfdCreateDevice - %s\n",
288
290}
#define FILE_DEVICE_SECURE_OPEN
#define NT_SUCCESS(StatCode)
static void cleanup(void)
struct _BEEP_DEVICE_EXTENSION * PDEVICE_EXTENSION
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
Returns a pointer to the I/O manager's global configuration information structure.
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define THREAD_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define FILE_FLOPPY_DISKETTE
#define FILE_REMOVABLE_MEDIA
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)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
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)
#define STATUS_OBJECT_NAME_EXISTS
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)
UNICODE_STRING RegistryPath
#define RtlZeroMemory(Destination, Length)
#define STATUS_DRIVER_INTERNAL_ERROR
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_INSUFFICIENT_RESOURCES
#define VFDTRACE(LEVEL, STRING)
VOID NTAPI VfdDeviceThread(IN PVOID ThreadContext)
PWSTR VfdCopyUnicode(PUNICODE_STRING dst, PUNICODE_STRING src)
struct _VFD_DRIVER_EXTENSION * PVFD_DRIVER_EXTENSION
NTSTATUS VfdLoadLink(IN PDEVICE_EXTENSION DeviceExtension, IN PWSTR RegistryPath)
const DISK_GEOMETRY geom_tbl[VFD_MEDIA_MAX]
#define VFD_DEVICE_BASENAME
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
#define ObDereferenceObject
_Inout_opt_ PVOID Parameter