1 /* 2 * COPYRIGHT: GPL - See COPYING in the top level directory 3 * PROJECT: ReactOS Virtual DOS Machine 4 * FILE: subsystems/mvdm/ntvdm/dos/dos32krnl/dosfiles.h 5 * PURPOSE: DOS32 Files Support 6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org> 7 */ 8 9 #pragma once 10 11 /* DEFINES ********************************************************************/ 12 13 #define FILE_INFO_STDIN (1 << 0) 14 #define FILE_INFO_STDOUT (1 << 1) 15 #define FILE_INFO_BINARY (1 << 5) 16 #define FILE_INFO_DEVICE (1 << 7) 17 18 #pragma pack(push, 1) 19 20 #if 0 // Real DOS-5 SFT entry, for reference only 21 typedef struct _DOS_FILE_DESCRIPTOR_DOS5 22 { 23 WORD RefCount; // 0x00 24 WORD OpenMode; // 0x02 25 BYTE Attributes; // 0x04 26 WORD DeviceInfo; // 0x05 27 DWORD DevicePointer; // 0x07 28 WORD StartCluster; // 0x0b 29 WORD Time; // 0x0d 30 WORD Date; // 0x0f 31 DWORD Size; // 0x11 32 DWORD Position; // 0x15 33 BYTE Reserved0[7]; // 0x19 34 CHAR FileName[11]; // 0x20 35 BYTE Reserved1[6]; // 0x2b 36 WORD OwnerPsp; // 0x31 37 BYTE Reserved2[8]; // 0x33 38 } DOS_FILE_DESCRIPTOR_DOS5, *PDOS_FILE_DESCRIPTOR_DOS5; 39 40 C_ASSERT(sizeof(DOS_FILE_DESCRIPTOR_DOS5) == 0x3B); 41 #endif 42 43 // Modified DOS SFT entry, compatible for NTVDM only 44 typedef struct _DOS_FILE_DESCRIPTOR 45 { 46 WORD RefCount; 47 WORD OpenMode; 48 BYTE Attributes; 49 WORD DeviceInfo; 50 DWORD DevicePointer; 51 WORD Time; 52 WORD Date; 53 DWORD Size; 54 DWORD Position; 55 DWORD Reserved; 56 WORD OwnerPsp; 57 HANDLE Win32Handle; 58 CHAR FileName[11]; 59 BYTE Padding[0x13 - sizeof(HANDLE)]; 60 } DOS_FILE_DESCRIPTOR, *PDOS_FILE_DESCRIPTOR; 61 62 C_ASSERT(sizeof(DOS_FILE_DESCRIPTOR) == 0x3B); 63 64 typedef struct _DOS_SFT 65 { 66 DWORD Link; 67 WORD NumDescriptors; 68 DOS_FILE_DESCRIPTOR FileDescriptors[ANYSIZE_ARRAY]; 69 } DOS_SFT, *PDOS_SFT; 70 71 /* FUNCTIONS ******************************************************************/ 72 73 BYTE DosFindFreeDescriptor(VOID); 74 BYTE DosFindWin32Descriptor(HANDLE Win32Handle); 75 BYTE DosFindDeviceDescriptor(DWORD DevicePointer); 76 PDOS_FILE_DESCRIPTOR DosGetFileDescriptor(BYTE Id); 77 PDOS_FILE_DESCRIPTOR DosGetHandleFileDescriptor(WORD DosHandle); 78 79 WORD DosCreateFileEx 80 ( 81 LPWORD Handle, 82 LPWORD CreationStatus, 83 LPCSTR FilePath, 84 BYTE AccessShareModes, 85 WORD CreateActionFlags, 86 WORD Attributes 87 ); 88 89 WORD DosCreateFile 90 ( 91 LPWORD Handle, 92 LPCSTR FilePath, 93 DWORD CreationDisposition, 94 WORD Attributes 95 ); 96 97 WORD DosOpenFile 98 ( 99 LPWORD Handle, 100 LPCSTR FilePath, 101 BYTE AccessShareModes 102 ); 103 104 WORD DosReadFile 105 ( 106 WORD FileHandle, 107 DWORD Buffer, 108 WORD Count, 109 LPWORD BytesRead 110 ); 111 112 WORD DosWriteFile 113 ( 114 WORD FileHandle, 115 DWORD Buffer, 116 WORD Count, 117 LPWORD BytesWritten 118 ); 119 120 WORD DosSeekFile 121 ( 122 WORD FileHandle, 123 LONG Offset, 124 BYTE Origin, 125 LPDWORD NewOffset 126 ); 127 128 BYTE DosReadLineBuffered(WORD FileHandle, DWORD Buffer, BYTE MaxSize); 129 BOOL DosFlushFileBuffers(WORD FileHandle); 130 BOOLEAN DosLockFile(WORD DosHandle, DWORD Offset, DWORD Size); 131 BOOLEAN DosUnlockFile(WORD DosHandle, DWORD Offset, DWORD Size); 132 133 BOOLEAN DosDeviceIoControl 134 ( 135 WORD FileHandle, 136 BYTE ControlCode, 137 DWORD Buffer, 138 PWORD Length 139 ); 140 141 #pragma pack(pop) 142