Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfastio.c
Go to the documentation of this file.
00001 /* 00002 * FILE: drivers/fs/vfat/fastio.c 00003 * PURPOSE: Fast IO routines. 00004 * COPYRIGHT: See COPYING in the top level directory 00005 * PROJECT: ReactOS kernel 00006 * PROGRAMMER: Herve Poussineau (hpoussin@reactos.org) 00007 */ 00008 00009 #define NDEBUG 00010 #include "vfat.h" 00011 00012 static BOOLEAN NTAPI 00013 VfatFastIoCheckIfPossible(IN PFILE_OBJECT FileObject, 00014 IN PLARGE_INTEGER FileOffset, 00015 IN ULONG Lenght, 00016 IN BOOLEAN Wait, 00017 IN ULONG LockKey, 00018 IN BOOLEAN CheckForReadOperation, 00019 OUT PIO_STATUS_BLOCK IoStatus, 00020 IN PDEVICE_OBJECT DeviceObject) 00021 { 00022 /* Prevent all Fast I/O requests */ 00023 DPRINT("VfatFastIoCheckIfPossible(): returning FALSE.\n"); 00024 return FALSE; 00025 } 00026 00027 static BOOLEAN NTAPI 00028 VfatFastIoRead(IN PFILE_OBJECT FileObject, 00029 IN PLARGE_INTEGER FileOffset, 00030 IN ULONG Length, 00031 IN BOOLEAN Wait, 00032 IN ULONG LockKey, 00033 OUT PVOID Buffer, 00034 OUT PIO_STATUS_BLOCK IoStatus, 00035 IN PDEVICE_OBJECT DeviceObject) 00036 { 00037 DPRINT("VfatFastIoRead()\n"); 00038 return FALSE; 00039 } 00040 00041 static BOOLEAN NTAPI 00042 VfatFastIoWrite(IN PFILE_OBJECT FileObject, 00043 IN PLARGE_INTEGER FileOffset, 00044 IN ULONG Length, 00045 IN BOOLEAN Wait, 00046 IN ULONG LockKey, 00047 OUT PVOID Buffer, 00048 OUT PIO_STATUS_BLOCK IoStatus, 00049 IN PDEVICE_OBJECT DeviceObject) 00050 { 00051 DPRINT("VfatFastIoWrite()\n"); 00052 return FALSE; 00053 } 00054 00055 static BOOLEAN NTAPI 00056 VfatFastIoQueryBasicInfo(IN PFILE_OBJECT FileObject, 00057 IN BOOLEAN Wait, 00058 OUT PFILE_BASIC_INFORMATION Buffer, 00059 OUT PIO_STATUS_BLOCK IoStatus, 00060 IN PDEVICE_OBJECT DeviceObject) 00061 { 00062 DPRINT("VfatFastIoQueryBasicInfo()\n"); 00063 return FALSE; 00064 } 00065 00066 static BOOLEAN NTAPI 00067 VfatFastIoQueryStandardInfo(IN PFILE_OBJECT FileObject, 00068 IN BOOLEAN Wait, 00069 OUT PFILE_STANDARD_INFORMATION Buffer, 00070 OUT PIO_STATUS_BLOCK IoStatus, 00071 IN PDEVICE_OBJECT DeviceObject) 00072 { 00073 DPRINT("VfatFastIoQueryStandardInfo\n"); 00074 return FALSE; 00075 } 00076 00077 static BOOLEAN NTAPI 00078 VfatFastIoLock(IN PFILE_OBJECT FileObject, 00079 IN PLARGE_INTEGER FileOffset, 00080 IN PLARGE_INTEGER Length, 00081 PEPROCESS ProcessId, 00082 ULONG Key, 00083 BOOLEAN FailImmediately, 00084 BOOLEAN ExclusiveLock, 00085 OUT PIO_STATUS_BLOCK IoStatus, 00086 IN PDEVICE_OBJECT DeviceObject) 00087 { 00088 DPRINT("VfatFastIoLock\n"); 00089 return FALSE; 00090 } 00091 00092 static BOOLEAN NTAPI 00093 VfatFastIoUnlockSingle(IN PFILE_OBJECT FileObject, 00094 IN PLARGE_INTEGER FileOffset, 00095 IN PLARGE_INTEGER Length, 00096 PEPROCESS ProcessId, 00097 ULONG Key, 00098 OUT PIO_STATUS_BLOCK IoStatus, 00099 IN PDEVICE_OBJECT DeviceObject) 00100 { 00101 DPRINT("VfatFastIoUnlockSingle\n"); 00102 return FALSE; 00103 } 00104 00105 static BOOLEAN NTAPI 00106 VfatFastIoUnlockAll(IN PFILE_OBJECT FileObject, 00107 PEPROCESS ProcessId, 00108 OUT PIO_STATUS_BLOCK IoStatus, 00109 IN PDEVICE_OBJECT DeviceObject) 00110 { 00111 DPRINT("VfatFastIoUnlockAll\n"); 00112 return FALSE; 00113 } 00114 00115 static BOOLEAN NTAPI 00116 VfatFastIoUnlockAllByKey(IN PFILE_OBJECT FileObject, 00117 PVOID ProcessId, 00118 ULONG Key, 00119 OUT PIO_STATUS_BLOCK IoStatus, 00120 IN PDEVICE_OBJECT DeviceObject) 00121 { 00122 DPRINT("VfatFastIoUnlockAllByKey\n"); 00123 return FALSE; 00124 } 00125 00126 static BOOLEAN NTAPI 00127 VfatFastIoDeviceControl(IN PFILE_OBJECT FileObject, 00128 IN BOOLEAN Wait, 00129 IN PVOID InputBuffer OPTIONAL, 00130 IN ULONG InputBufferLength, 00131 OUT PVOID OutputBuffer OPTIONAL, 00132 IN ULONG OutputBufferLength, 00133 IN ULONG IoControlCode, 00134 OUT PIO_STATUS_BLOCK IoStatus, 00135 IN PDEVICE_OBJECT DeviceObject) 00136 { 00137 DPRINT("VfatFastIoDeviceControl\n"); 00138 return FALSE; 00139 } 00140 00141 static VOID NTAPI 00142 VfatAcquireFileForNtCreateSection(IN PFILE_OBJECT FileObject) 00143 { 00144 DPRINT("VfatAcquireFileForNtCreateSection\n"); 00145 } 00146 00147 static VOID NTAPI 00148 VfatReleaseFileForNtCreateSection(IN PFILE_OBJECT FileObject) 00149 { 00150 DPRINT("VfatReleaseFileForNtCreateSection\n"); 00151 } 00152 00153 static VOID NTAPI 00154 VfatFastIoDetachDevice(IN PDEVICE_OBJECT SourceDevice, 00155 IN PDEVICE_OBJECT TargetDevice) 00156 { 00157 DPRINT("VfatFastIoDetachDevice\n"); 00158 } 00159 00160 static BOOLEAN NTAPI 00161 VfatFastIoQueryNetworkOpenInfo(IN PFILE_OBJECT FileObject, 00162 IN BOOLEAN Wait, 00163 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer, 00164 OUT PIO_STATUS_BLOCK IoStatus, 00165 IN PDEVICE_OBJECT DeviceObject) 00166 { 00167 DPRINT("VfatFastIoQueryNetworkOpenInfo\n"); 00168 return FALSE; 00169 } 00170 00171 static NTSTATUS NTAPI 00172 VfatAcquireForModWrite(IN PFILE_OBJECT FileObject, 00173 IN PLARGE_INTEGER EndingOffset, 00174 OUT PERESOURCE* ResourceToRelease, 00175 IN PDEVICE_OBJECT DeviceObject) 00176 { 00177 DPRINT("VfatAcquireForModWrite\n"); 00178 return STATUS_INVALID_DEVICE_REQUEST; 00179 } 00180 00181 static BOOLEAN NTAPI 00182 VfatMdlRead(IN PFILE_OBJECT FileObject, 00183 IN PLARGE_INTEGER FileOffset, 00184 IN ULONG Length, 00185 IN ULONG LockKey, 00186 OUT PMDL* MdlChain, 00187 OUT PIO_STATUS_BLOCK IoStatus, 00188 IN PDEVICE_OBJECT DeviceObject) 00189 { 00190 DPRINT("VfatMdlRead\n"); 00191 return FALSE; 00192 } 00193 00194 static BOOLEAN NTAPI 00195 VfatMdlReadComplete(IN PFILE_OBJECT FileObject, 00196 IN PMDL MdlChain, 00197 IN PDEVICE_OBJECT DeviceObject) 00198 { 00199 DPRINT("VfatMdlReadComplete\n"); 00200 return FALSE; 00201 } 00202 00203 static BOOLEAN NTAPI 00204 VfatPrepareMdlWrite(IN PFILE_OBJECT FileObject, 00205 IN PLARGE_INTEGER FileOffset, 00206 IN ULONG Length, 00207 IN ULONG LockKey, 00208 OUT PMDL* MdlChain, 00209 OUT PIO_STATUS_BLOCK IoStatus, 00210 IN PDEVICE_OBJECT DeviceObject) 00211 { 00212 DPRINT("VfatPrepareMdlWrite\n"); 00213 return FALSE; 00214 } 00215 00216 static BOOLEAN NTAPI 00217 VfatMdlWriteComplete(IN PFILE_OBJECT FileObject, 00218 IN PLARGE_INTEGER FileOffset, 00219 IN PMDL MdlChain, 00220 IN PDEVICE_OBJECT DeviceObject) 00221 { 00222 DPRINT("VfatMdlWriteComplete\n"); 00223 return FALSE; 00224 } 00225 00226 static BOOLEAN NTAPI 00227 VfatFastIoReadCompressed(IN PFILE_OBJECT FileObject, 00228 IN PLARGE_INTEGER FileOffset, 00229 IN ULONG Length, 00230 IN ULONG LockKey, 00231 OUT PVOID Buffer, 00232 OUT PMDL* MdlChain, 00233 OUT PIO_STATUS_BLOCK IoStatus, 00234 OUT PCOMPRESSED_DATA_INFO CompressedDataInfo, 00235 IN ULONG CompressedDataInfoLength, 00236 IN PDEVICE_OBJECT DeviceObject) 00237 { 00238 DPRINT("VfatFastIoReadCompressed\n"); 00239 return FALSE; 00240 } 00241 00242 static BOOLEAN NTAPI 00243 VfatFastIoWriteCompressed(IN PFILE_OBJECT FileObject, 00244 IN PLARGE_INTEGER FileOffset, 00245 IN ULONG Length, 00246 IN ULONG LockKey, 00247 IN PVOID Buffer, 00248 OUT PMDL* MdlChain, 00249 OUT PIO_STATUS_BLOCK IoStatus, 00250 IN PCOMPRESSED_DATA_INFO CompressedDataInfo, 00251 IN ULONG CompressedDataInfoLength, 00252 IN PDEVICE_OBJECT DeviceObject) 00253 { 00254 DPRINT("VfatFastIoWriteCompressed\n"); 00255 return FALSE; 00256 } 00257 00258 static BOOLEAN NTAPI 00259 VfatMdlReadCompleteCompressed(IN PFILE_OBJECT FileObject, 00260 IN PMDL MdlChain, 00261 IN PDEVICE_OBJECT DeviceObject) 00262 { 00263 DPRINT("VfatMdlReadCompleteCompressed\n"); 00264 return FALSE; 00265 } 00266 00267 static BOOLEAN NTAPI 00268 VfatMdlWriteCompleteCompressed(IN PFILE_OBJECT FileObject, 00269 IN PLARGE_INTEGER FileOffset, 00270 IN PMDL MdlChain, 00271 IN PDEVICE_OBJECT DeviceObject) 00272 { 00273 DPRINT("VfatMdlWriteCompleteCompressed\n"); 00274 return FALSE; 00275 } 00276 00277 static BOOLEAN NTAPI 00278 VfatFastIoQueryOpen(IN PIRP Irp, 00279 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, 00280 IN PDEVICE_OBJECT DeviceObject) 00281 { 00282 DPRINT("VfatFastIoQueryOpen\n"); 00283 return FALSE; 00284 } 00285 00286 static NTSTATUS NTAPI 00287 VfatReleaseForModWrite(IN PFILE_OBJECT FileObject, 00288 IN PERESOURCE ResourceToRelease, 00289 IN PDEVICE_OBJECT DeviceObject) 00290 { 00291 DPRINT("VfatReleaseForModWrite\n"); 00292 return STATUS_INVALID_DEVICE_REQUEST; 00293 } 00294 00295 static NTSTATUS NTAPI 00296 VfatAcquireForCcFlush(IN PFILE_OBJECT FileObject, 00297 IN PDEVICE_OBJECT DeviceObject) 00298 { 00299 PVFATFCB Fcb = (PVFATFCB)FileObject->FsContext; 00300 00301 DPRINT("VfatAcquireForCcFlush\n"); 00302 00303 /* Make sure it is not a volume lock */ 00304 ASSERT(!(Fcb->Flags & FCB_IS_VOLUME)); 00305 00306 /* Acquire the resource */ 00307 ExAcquireResourceExclusiveLite(&(Fcb->MainResource), TRUE); 00308 00309 return STATUS_SUCCESS; 00310 } 00311 00312 static NTSTATUS NTAPI 00313 VfatReleaseForCcFlush(IN PFILE_OBJECT FileObject, 00314 IN PDEVICE_OBJECT DeviceObject) 00315 { 00316 PVFATFCB Fcb = (PVFATFCB)FileObject->FsContext; 00317 00318 DPRINT("VfatReleaseForCcFlush\n"); 00319 00320 /* Make sure it is not a volume lock */ 00321 ASSERT(!(Fcb->Flags & FCB_IS_VOLUME)); 00322 00323 /* Release the resource */ 00324 ExReleaseResourceLite(&(Fcb->MainResource)); 00325 00326 return STATUS_SUCCESS; 00327 } 00328 00329 BOOLEAN NTAPI 00330 VfatAcquireForLazyWrite(IN PVOID Context, 00331 IN BOOLEAN Wait) 00332 { 00333 PVFATFCB Fcb = (PVFATFCB)Context; 00334 ASSERT(Fcb); 00335 DPRINT("VfatAcquireForLazyWrite(): Fcb %p\n", Fcb); 00336 00337 if (!ExAcquireResourceExclusiveLite(&(Fcb->MainResource), Wait)) 00338 { 00339 DPRINT("VfatAcquireForLazyWrite(): ExReleaseResourceLite failed.\n"); 00340 return FALSE; 00341 } 00342 return TRUE; 00343 } 00344 00345 VOID NTAPI 00346 VfatReleaseFromLazyWrite(IN PVOID Context) 00347 { 00348 PVFATFCB Fcb = (PVFATFCB)Context; 00349 ASSERT(Fcb); 00350 DPRINT("VfatReleaseFromLazyWrite(): Fcb %p\n", Fcb); 00351 00352 ExReleaseResourceLite(&(Fcb->MainResource)); 00353 } 00354 00355 BOOLEAN NTAPI 00356 VfatAcquireForReadAhead(IN PVOID Context, 00357 IN BOOLEAN Wait) 00358 { 00359 PVFATFCB Fcb = (PVFATFCB)Context; 00360 ASSERT(Fcb); 00361 DPRINT("VfatAcquireForReadAhead(): Fcb %p\n", Fcb); 00362 00363 if (!ExAcquireResourceExclusiveLite(&(Fcb->MainResource), Wait)) 00364 { 00365 DPRINT("VfatAcquireForReadAhead(): ExReleaseResourceLite failed.\n"); 00366 return FALSE; 00367 } 00368 return TRUE; 00369 } 00370 00371 VOID NTAPI 00372 VfatReleaseFromReadAhead(IN PVOID Context) 00373 { 00374 PVFATFCB Fcb = (PVFATFCB)Context; 00375 ASSERT(Fcb); 00376 DPRINT("VfatReleaseFromReadAhead(): Fcb %p\n", Fcb); 00377 00378 ExReleaseResourceLite(&(Fcb->MainResource)); 00379 } 00380 00381 VOID 00382 VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch) 00383 { 00384 FastIoDispatch->SizeOfFastIoDispatch = sizeof(FAST_IO_DISPATCH); 00385 FastIoDispatch->FastIoCheckIfPossible = VfatFastIoCheckIfPossible; 00386 FastIoDispatch->FastIoRead = VfatFastIoRead; 00387 FastIoDispatch->FastIoWrite = VfatFastIoWrite; 00388 FastIoDispatch->FastIoQueryBasicInfo = VfatFastIoQueryBasicInfo; 00389 FastIoDispatch->FastIoQueryStandardInfo = VfatFastIoQueryStandardInfo; 00390 FastIoDispatch->FastIoLock = VfatFastIoLock; 00391 FastIoDispatch->FastIoUnlockSingle = VfatFastIoUnlockSingle; 00392 FastIoDispatch->FastIoUnlockAll = VfatFastIoUnlockAll; 00393 FastIoDispatch->FastIoUnlockAllByKey = VfatFastIoUnlockAllByKey; 00394 FastIoDispatch->FastIoDeviceControl = VfatFastIoDeviceControl; 00395 FastIoDispatch->AcquireFileForNtCreateSection = VfatAcquireFileForNtCreateSection; 00396 FastIoDispatch->ReleaseFileForNtCreateSection = VfatReleaseFileForNtCreateSection; 00397 FastIoDispatch->FastIoDetachDevice = VfatFastIoDetachDevice; 00398 FastIoDispatch->FastIoQueryNetworkOpenInfo = VfatFastIoQueryNetworkOpenInfo; 00399 FastIoDispatch->MdlRead = VfatMdlRead; 00400 FastIoDispatch->MdlReadComplete = VfatMdlReadComplete; 00401 FastIoDispatch->PrepareMdlWrite = VfatPrepareMdlWrite; 00402 FastIoDispatch->MdlWriteComplete = VfatMdlWriteComplete; 00403 FastIoDispatch->FastIoReadCompressed = VfatFastIoReadCompressed; 00404 FastIoDispatch->FastIoWriteCompressed = VfatFastIoWriteCompressed; 00405 FastIoDispatch->MdlReadCompleteCompressed = VfatMdlReadCompleteCompressed; 00406 FastIoDispatch->MdlWriteCompleteCompressed = VfatMdlWriteCompleteCompressed; 00407 FastIoDispatch->FastIoQueryOpen = VfatFastIoQueryOpen; 00408 FastIoDispatch->AcquireForModWrite = VfatAcquireForModWrite; 00409 FastIoDispatch->ReleaseForModWrite = VfatReleaseForModWrite; 00410 FastIoDispatch->AcquireForCcFlush = VfatAcquireForCcFlush; 00411 FastIoDispatch->ReleaseForCcFlush = VfatReleaseForCcFlush; 00412 } 00413 Generated on Fri May 25 2012 04:25:51 for ReactOS by
1.7.6.1
|