2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
5 * PURPOSE: DOS 32-bit Emulation Support Library -
6 * This library is used by the built-in NTVDM DOS32 and by
7 * the NT 16-bit DOS in Windows (via BOPs). It also exposes
8 * exported functions that can be used by VDDs.
9 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
10 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
13 /* INCLUDES *******************************************************************/
19 /* Extra PSDK/NDK Headers */
20 #include <ndk/obtypes.h>
22 /**/extern BYTE CurrentDrive
;/**/
24 /* PUBLIC FUNCTIONS ***********************************************************/
26 BOOLEAN
DosInitialize(IN LPCSTR DosKernelFileNames
)
28 if (DosKernelFileNames
)
30 DisplayMessage(L
"NTVDM: Loading DOS kernel from external files is currently unsupported");
37 Result
= DosBIOSInitialize();
38 Result
&= DosKRNLInitialize();
44 /* PUBLIC EXPORTED APIS *******************************************************/
47 // demLFNGetCurrentDirectory
49 // demGetFileTimeByHandle_WOW
50 // demWOWLFNAllocateSearchHandle
51 // demWOWLFNCloseSearchHandle
53 // demWOWLFNGetSearchHandle
58 demClientErrorEx(IN HANDLE FileHandle
,
63 return GetLastError();
68 demFileDelete(IN LPCSTR FileName
)
70 if (DeleteFileA(FileName
)) SetLastError(ERROR_SUCCESS
);
72 return GetLastError();
77 demFileFindFirst(OUT PVOID lpFindFileData
,
81 BOOLEAN Success
= TRUE
;
82 WIN32_FIND_DATAA FindData
;
83 PDOS_FIND_FILE_BLOCK FindFileBlock
= (PDOS_FIND_FILE_BLOCK
)lpFindFileData
;
86 FindFileBlock
->DriveLetter
= CurrentDrive
+ 'A';
87 FindFileBlock
->AttribMask
= AttribMask
;
88 FindFileBlock
->SearchHandle
= FindFirstFileA(FileName
, &FindData
);
89 if (FindFileBlock
->SearchHandle
== INVALID_HANDLE_VALUE
) return GetLastError();
93 /* Check the attributes */
94 if (!((FindData
.dwFileAttributes
& (FILE_ATTRIBUTE_HIDDEN
|
95 FILE_ATTRIBUTE_SYSTEM
|
96 FILE_ATTRIBUTE_DIRECTORY
))
102 while ((Success
= FindNextFileA(FindFileBlock
->SearchHandle
, &FindData
)));
104 if (!Success
) return GetLastError();
106 FindFileBlock
->Attributes
= LOBYTE(FindData
.dwFileAttributes
);
107 FileTimeToDosDateTime(&FindData
.ftLastWriteTime
,
108 &FindFileBlock
->FileDate
,
109 &FindFileBlock
->FileTime
);
110 FindFileBlock
->FileSize
= FindData
.nFileSizeHigh
? 0xFFFFFFFF
111 : FindData
.nFileSizeLow
;
112 strcpy(FindFileBlock
->FileName
, FindData
.cAlternateFileName
);
114 return ERROR_SUCCESS
;
119 demFileFindNext(OUT PVOID lpFindFileData
)
121 WIN32_FIND_DATAA FindData
;
122 PDOS_FIND_FILE_BLOCK FindFileBlock
= (PDOS_FIND_FILE_BLOCK
)lpFindFileData
;
126 if (!FindNextFileA(FindFileBlock
->SearchHandle
, &FindData
))
127 return GetLastError();
129 /* Update the block */
130 FindFileBlock
->Attributes
= LOBYTE(FindData
.dwFileAttributes
);
131 FileTimeToDosDateTime(&FindData
.ftLastWriteTime
,
132 &FindFileBlock
->FileDate
,
133 &FindFileBlock
->FileTime
);
134 FindFileBlock
->FileSize
= FindData
.nFileSizeHigh
? 0xFFFFFFFF
135 : FindData
.nFileSizeLow
;
136 strcpy(FindFileBlock
->FileName
, FindData
.cAlternateFileName
);
138 while((FindData
.dwFileAttributes
& (FILE_ATTRIBUTE_HIDDEN
|
139 FILE_ATTRIBUTE_SYSTEM
|
140 FILE_ATTRIBUTE_DIRECTORY
))
141 & ~FindFileBlock
->AttribMask
);
143 return ERROR_SUCCESS
;
148 demGetPhysicalDriveType(IN UCHAR DriveNumber
)
151 return DOSDEVICE_DRIVE_UNKNOWN
;
156 demIsShortPathName(IN LPCSTR Path
,
165 demSetCurrentDirectoryGetDrive(IN LPCSTR CurrentDirectory
,
166 OUT PUCHAR DriveNumber
)
169 return ERROR_SUCCESS
;