ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

fastio.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.