Skip to content

Commit a063bd3

Browse files
committed
Add CreateFile windows primitive
TN: W310-026 Change-Id: I5e9ad31e2fbfa53b803c6389d2f595792fa0d6aa
1 parent 8dd50db commit a063bd3

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/os/win32/gnatcoll-os-win32-files.ads

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,51 @@ package GNATCOLL.OS.Win32.Files is
262262
Convention => Stdcall,
263263
External_Name => "NtQueryDirectoryFile";
264264

265+
subtype ACCESS_MODE is DWORD;
266+
267+
GENERIC_READ : constant ACCESS_MODE := 16#8000_0000#;
268+
GENERIC_WRITE : constant ACCESS_MODE := 16#4000_0000#;
269+
GENERIC_EXECUTE : constant ACCESS_MODE := 16#2000_0000#;
270+
GENERIC_ALL : constant ACCESS_MODE := 16#1000_0000#;
271+
272+
subtype CF_SHARE_MODE is DWORD;
273+
274+
-- Note: FILE_SHARE_NONE does not exist, only the value 0 is given
275+
-- in the CreateFile documentation.
276+
CF_FILE_SHARE_NONE : constant CF_SHARE_MODE := 16#0000_0000#;
277+
CF_FILE_SHARE_DELETE : constant CF_SHARE_MODE := 16#0000_0004#;
278+
CF_FILE_SHARE_READ : constant CF_SHARE_MODE := 16#0000_0001#;
279+
CF_FILE_SHARE_WRITE : constant CF_SHARE_MODE := 16#0000_0002#;
280+
281+
subtype CF_CREATION_DISPOSITION is DWORD;
282+
283+
CF_CREATE_ALWAYS : constant CF_CREATION_DISPOSITION := 16#0000_0002#;
284+
CF_CREATE_NEW : constant CF_CREATION_DISPOSITION := 16#0000_0001#;
285+
CF_OPEN_ALWAYS : constant CF_CREATION_DISPOSITION := 16#0000_0004#;
286+
CF_OPEN_EXISTING : constant CF_CREATION_DISPOSITION := 16#0000_0003#;
287+
CF_TRUNCATE_EXISTING : constant CF_CREATION_DISPOSITION := 16#0000_0005#;
288+
289+
subtype CF_FILE_ATTRIBUTE is DWORD;
290+
291+
CF_FILE_ATTRIBUTE_ARCHIVE : constant CF_FILE_ATTRIBUTE := 16#0000_0020#;
292+
CF_FILE_ATTRIBUTE_ENCRYPTED : constant CF_FILE_ATTRIBUTE := 16#0000_4000#;
293+
CF_FILE_ATTRIBUTE_HIDDEN : constant CF_FILE_ATTRIBUTE := 16#0000_0002#;
294+
CF_FILE_ATTRIBUTE_NORMAL : constant CF_FILE_ATTRIBUTE := 16#0000_0080#;
295+
CF_FILE_ATTRIBUTE_OFFLINE : constant CF_FILE_ATTRIBUTE := 16#0000_1000#;
296+
CF_FILE_ATTRIBUTE_READONLY : constant CF_FILE_ATTRIBUTE := 16#0000_0001#;
297+
CF_FILE_ATTRIBUTE_SYSTEM : constant CF_FILE_ATTRIBUTE := 16#0000_0004#;
298+
CF_FILE_ATTRIBUTE_TEMPORARY : constant CF_FILE_ATTRIBUTE := 16#0000_0100#;
299+
CF_FILE_FLAG_BACKUP_SEMANTICS : constant CF_FILE_ATTRIBUTE := 16#0200_0000#;
300+
301+
function CreateFile
302+
(Filename : OS.C_WString; DesiredAccess : ACCESS_MODE;
303+
ShareMode : CF_SHARE_MODE;
304+
SecurityAttributes : LPSECURITY_ATTRIBUTES := null;
305+
CreationDisposition : CF_CREATION_DISPOSITION;
306+
FlagsAndAttributes : CF_FILE_ATTRIBUTE;
307+
TemplateFile : HANDLE := NULL_HANDLE) return HANDLE with
308+
Import => True, Convention => Stdcall, External_Name => "CreateFileW";
309+
265310
function Open
266311
(Filename : C_WString;
267312
Flags : Open_Mode;

src/os/win32/gnatcoll-os-win32.ads

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ package GNATCOLL.OS.Win32 is
6666
type PHANDLE is access all HANDLE;
6767
NULL_LPVOID : constant LPVOID := LPVOID (System.Null_Address);
6868
NULL_HANDLE : constant HANDLE := HANDLE (0);
69+
INVALID_HANDLE_VALUE : constant HANDLE := HANDLE'Last;
6970

7071
-- Unicode strings used by Windows Native interfaces
7172
type UNICODE_STRING is record

0 commit comments

Comments
 (0)