2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: services/fs/vfat/blockdev.c
5 * PURPOSE: Temporary sector reading support
6 * PROGRAMMER: David Welch (welch@mcmail.com)
10 /* INCLUDES *****************************************************************/
12 #include <ddk/ntddk.h>
14 #include <internal/string.h>
17 #include <internal/debug.h>
21 /* FUNCTIONS ***************************************************************/
23 BOOLEAN
Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject
,
28 LARGE_INTEGER sectorNumber
;
30 IO_STATUS_BLOCK ioStatus
;
36 DPRINT("VFATReadSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n",
37 pDeviceObject
,DiskSector
,Buffer
);
39 sectorNumber
.HighPart
= 0;
40 sectorNumber
.LowPart
= DiskSector
* BLOCKSIZE
;
42 DPRINT("DiskSector:%ld BLKSZ:%ld sectorNumber:%ld:%ld\n",
43 (unsigned long) DiskSector
,
44 (unsigned long) BLOCKSIZE
,
45 (unsigned long) sectorNumber
.HighPart
,
46 (unsigned long) sectorNumber
.LowPart
);
48 KeInitializeEvent(&event
, NotificationEvent
, FALSE
);
50 sectorSize
= BLOCKSIZE
*SectorCount
;
53 DPRINT("Building synchronous FSD Request...\n");
54 irp
= IoBuildSynchronousFsdRequest(IRP_MJ_READ
,
63 DbgPrint("READ failed!!!\n");
67 DPRINT("Calling IO Driver...\n");
68 status
= IoCallDriver(pDeviceObject
,
71 DPRINT("Waiting for IO Operation...\n");
72 if (status
== STATUS_PENDING
) {
73 KeWaitForSingleObject(&event
,
78 DPRINT("Getting IO Status...\n");
79 status
= ioStatus
.Status
;
82 if (!NT_SUCCESS(status
)) {
83 DbgPrint("IO failed!!! Error code: %d(%x)\n", status
, status
);
90 BOOLEAN
VFATWriteSectors(IN PDEVICE_OBJECT pDeviceObject
,
95 LARGE_INTEGER sectorNumber
;
97 IO_STATUS_BLOCK ioStatus
;
104 DPRINT("VFATWriteSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n",
105 pDeviceObject
,DiskSector
,Buffer
);
107 sectorNumber
.HighPart
= 0;
108 sectorNumber
.LowPart
= DiskSector
* BLOCKSIZE
;
110 KeInitializeEvent(&event
, NotificationEvent
, FALSE
);
112 sectorSize
= BLOCKSIZE
*SectorCount
;
115 DPRINT("Building synchronous FSD Request...\n");
116 irp
= IoBuildSynchronousFsdRequest(IRP_MJ_WRITE
,
125 DbgPrint("WRITE failed!!!\n");
129 DPRINT("Calling IO Driver...\n");
130 status
= IoCallDriver(pDeviceObject
,
133 DPRINT("Waiting for IO Operation...\n");
134 if (status
== STATUS_PENDING
) {
135 KeWaitForSingleObject(&event
,
140 DPRINT("Getting IO Status...\n");
141 status
= ioStatus
.Status
;
144 if (!NT_SUCCESS(status
)) {
145 DbgPrint("IO failed!!! Error code: %d(%x)\n", status
, status
);
151 DPRINT("Block request succeeded\n");