ReactOS 0.4.16-dev-2279-gc890759
fileinfo.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/kernel32/client/file/fileinfo.c
5 * PURPOSE: Directory functions
6 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
7 * Pierre Schweitzer (pierre.schweitzer@reactos.org)
8 * UPDATE HISTORY:
9 * Created 01/11/98
10 */
11
12/* INCLUDES *****************************************************************/
13
14#include <k32.h>
15#define NDEBUG
16#include <debug.h>
18
19/* FUNCTIONS ****************************************************************/
20
21/*
22 * @implemented
23 */
26{
29
31
33 {
35 }
36
39 if (!NT_SUCCESS(Status))
40 {
42 return FALSE;
43 }
44 return TRUE;
45}
46
47
48/*
49 * @implemented
50 */
55 LONG lDistanceToMove,
56 PLONG lpDistanceToMoveHigh,
57 DWORD dwMoveMethod)
58{
59 FILE_POSITION_INFORMATION FilePosition;
60 FILE_STANDARD_INFORMATION FileStandard;
61 NTSTATUS errCode;
63 LARGE_INTEGER Distance;
64
65 TRACE("SetFilePointer(hFile %p, lDistanceToMove %d, dwMoveMethod %lu)\n",
66 hFile,lDistanceToMove,dwMoveMethod);
67
69 {
72 }
73
74 if (lpDistanceToMoveHigh)
75 {
76 Distance.u.HighPart = *lpDistanceToMoveHigh;
77 Distance.u.LowPart = lDistanceToMove;
78 }
79 else
80 {
81 Distance.QuadPart = lDistanceToMove;
82 }
83
84 switch(dwMoveMethod)
85 {
86 case FILE_CURRENT:
89 &FilePosition,
92 FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart;
93 if (!NT_SUCCESS(errCode))
94 {
95 if (lpDistanceToMoveHigh != NULL)
96 *lpDistanceToMoveHigh = -1;
97 BaseSetLastNTError(errCode);
99 }
100 break;
101 case FILE_END:
104 &FileStandard,
107 FilePosition.CurrentByteOffset.QuadPart =
108 FileStandard.EndOfFile.QuadPart + Distance.QuadPart;
109 if (!NT_SUCCESS(errCode))
110 {
111 if (lpDistanceToMoveHigh != NULL)
112 *lpDistanceToMoveHigh = -1;
113 BaseSetLastNTError(errCode);
115 }
116 break;
117 case FILE_BEGIN:
118 FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart;
119 break;
120 default:
123 }
124
125 if(FilePosition.CurrentByteOffset.QuadPart < 0)
126 {
129 }
130
131 if (lpDistanceToMoveHigh == NULL && FilePosition.CurrentByteOffset.HighPart != 0)
132 {
133 /* If we're moving the pointer outside of the 32 bit boundaries but
134 the application only passed a 32 bit value we need to bail out! */
137 }
138
139 errCode = NtSetInformationFile(hFile,
141 &FilePosition,
144 if (!NT_SUCCESS(errCode))
145 {
146 if (lpDistanceToMoveHigh != NULL)
147 *lpDistanceToMoveHigh = -1;
148
149 BaseSetLastNTError(errCode);
151 }
152
153 if (lpDistanceToMoveHigh != NULL)
154 {
155 *lpDistanceToMoveHigh = FilePosition.CurrentByteOffset.u.HighPart;
156 }
157
158 if (FilePosition.CurrentByteOffset.u.LowPart == MAXDWORD)
159 {
160 /* The value of -1 is valid here, especially when the new
161 file position is greater than 4 GB. Since NtSetInformationFile
162 succeeded we never set an error code and we explicitly need
163 to clear a previously set error code in this case, which
164 an application will check if INVALID_SET_FILE_POINTER is returned! */
166 }
167
168 return FilePosition.CurrentByteOffset.u.LowPart;
169}
170
171
172/*
173 * @implemented
174 */
175BOOL
176WINAPI
178 LARGE_INTEGER liDistanceToMove,
179 PLARGE_INTEGER lpNewFilePointer,
180 DWORD dwMoveMethod)
181{
184 FILE_POSITION_INFORMATION FilePosition;
185 FILE_STANDARD_INFORMATION FileStandard;
186
188 {
190 return FALSE;
191 }
192
193 switch (dwMoveMethod)
194 {
195 case FILE_CURRENT:
196 {
198 &FilePosition,
201 if (!NT_SUCCESS(Status))
202 {
204 return FALSE;
205 }
206
207 FilePosition.CurrentByteOffset.QuadPart += liDistanceToMove.QuadPart;
208 break;
209 }
210
211 case FILE_END:
212 {
214 &FileStandard,
217 if (!NT_SUCCESS(Status))
218 {
220 return FALSE;
221 }
222
223 FilePosition.CurrentByteOffset.QuadPart = FileStandard.EndOfFile.QuadPart +
224 liDistanceToMove.QuadPart;
225 break;
226 }
227
228 case FILE_BEGIN:
229 {
230 FilePosition.CurrentByteOffset.QuadPart = liDistanceToMove.QuadPart;
231 break;
232 }
233
234 default:
235 {
237 return FALSE;
238 }
239 }
240
241 if (FilePosition.CurrentByteOffset.QuadPart < 0)
242 {
244 return FALSE;
245 }
246
250 if (!NT_SUCCESS(Status))
251 {
253 return FALSE;
254 }
255
256 if (lpNewFilePointer != NULL)
257 {
258 *lpNewFilePointer = FilePosition.CurrentByteOffset;
259 }
260
261 return TRUE;
262}
263
264
265/*
266 * @implemented
267 */
270{
272 IO_STATUS_BLOCK StatusBlock;
274
275 /* Get real handle */
277
278 /* Check for console handle */
280 {
282 return FILE_TYPE_CHAR;
283 }
284
286 &StatusBlock,
287 &DeviceInfo,
290 if (!NT_SUCCESS(Status))
291 {
293 return FILE_TYPE_UNKNOWN;
294 }
295
296 switch (DeviceInfo.DeviceType)
297 {
302 case FILE_DEVICE_DFS:
303 case FILE_DEVICE_DISK:
306 return FILE_TYPE_DISK;
307
310 case FILE_DEVICE_NULL:
317 return FILE_TYPE_CHAR;
318
320 return FILE_TYPE_PIPE;
321 }
322
323 return FILE_TYPE_UNKNOWN;
324}
325
326
327/*
328 * @implemented
329 */
332 LPDWORD lpFileSizeHigh)
333{
334 NTSTATUS errCode;
335 FILE_STANDARD_INFORMATION FileStandard;
337
340 &FileStandard,
343 if (!NT_SUCCESS(errCode))
344 {
345 BaseSetLastNTError(errCode);
346 if ( lpFileSizeHigh == NULL )
347 {
348 return -1;
349 }
350 else
351 {
352 return 0;
353 }
354 }
355 if ( lpFileSizeHigh != NULL )
356 *lpFileSizeHigh = FileStandard.EndOfFile.u.HighPart;
357
358 return FileStandard.EndOfFile.u.LowPart;
359}
360
361
362/*
363 * @implemented
364 */
365BOOL
366WINAPI
369 PLARGE_INTEGER lpFileSize
370 )
371{
372 NTSTATUS errCode;
373 FILE_STANDARD_INFORMATION FileStandard;
375
378 &FileStandard,
381 if (!NT_SUCCESS(errCode))
382 {
383 BaseSetLastNTError(errCode);
384 return FALSE;
385 }
386 if (lpFileSize)
387 *lpFileSize = FileStandard.EndOfFile;
388
389 return TRUE;
390}
391
392
393/*
394 * @implemented
395 */
398 LPDWORD lpFileSizeHigh)
399{
400 FILE_COMPRESSION_INFORMATION FileCompression;
401 NTSTATUS errCode;
404
408 NULL,
411 NULL);
412
414 return INVALID_FILE_SIZE;
415
418 &FileCompression,
421
423
424 if (!NT_SUCCESS(errCode))
425 {
426 BaseSetLastNTError(errCode);
427 return INVALID_FILE_SIZE;
428 }
429
430 if(lpFileSizeHigh)
431 *lpFileSizeHigh = FileCompression.CompressedFileSize.u.HighPart;
432
434 return FileCompression.CompressedFileSize.u.LowPart;
435}
436
437
438/*
439 * @implemented
440 */
443 LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
444{
445 struct
446 {
447 FILE_FS_VOLUME_INFORMATION FileFsVolume;
448 WCHAR Name[255];
449 }
450 FileFsVolume;
451
452 FILE_BASIC_INFORMATION FileBasic;
453 FILE_INTERNAL_INFORMATION FileInternal;
454 FILE_STANDARD_INFORMATION FileStandard;
455 NTSTATUS errCode;
457
459 {
461 return FALSE;
462 }
463
466 &FileBasic,
469 if (!NT_SUCCESS(errCode))
470 {
471 BaseSetLastNTError(errCode);
472 return FALSE;
473 }
474
475 lpFileInformation->dwFileAttributes = (DWORD)FileBasic.FileAttributes;
476
477 lpFileInformation->ftCreationTime.dwHighDateTime = FileBasic.CreationTime.u.HighPart;
478 lpFileInformation->ftCreationTime.dwLowDateTime = FileBasic.CreationTime.u.LowPart;
479
480 lpFileInformation->ftLastAccessTime.dwHighDateTime = FileBasic.LastAccessTime.u.HighPart;
481 lpFileInformation->ftLastAccessTime.dwLowDateTime = FileBasic.LastAccessTime.u.LowPart;
482
483 lpFileInformation->ftLastWriteTime.dwHighDateTime = FileBasic.LastWriteTime.u.HighPart;
484 lpFileInformation->ftLastWriteTime.dwLowDateTime = FileBasic.LastWriteTime.u.LowPart;
485
488 &FileInternal,
491 if (!NT_SUCCESS(errCode))
492 {
493 BaseSetLastNTError(errCode);
494 return FALSE;
495 }
496
497 lpFileInformation->nFileIndexHigh = FileInternal.IndexNumber.u.HighPart;
498 lpFileInformation->nFileIndexLow = FileInternal.IndexNumber.u.LowPart;
499
502 &FileFsVolume,
503 sizeof(FileFsVolume),
505 if (!NT_SUCCESS(errCode))
506 {
507 BaseSetLastNTError(errCode);
508 return FALSE;
509 }
510
511 lpFileInformation->dwVolumeSerialNumber = FileFsVolume.FileFsVolume.VolumeSerialNumber;
512
515 &FileStandard,
518 if (!NT_SUCCESS(errCode))
519 {
520 BaseSetLastNTError(errCode);
521 return FALSE;
522 }
523
524 lpFileInformation->nNumberOfLinks = FileStandard.NumberOfLinks;
525 lpFileInformation->nFileSizeHigh = FileStandard.EndOfFile.u.HighPart;
526 lpFileInformation->nFileSizeLow = FileStandard.EndOfFile.u.LowPart;
527
528 return TRUE;
529}
530
531
532/*
533 * @implemented
534 */
537 GET_FILEEX_INFO_LEVELS fInfoLevelId,
538 LPVOID lpFileInformation)
539{
544 WIN32_FILE_ATTRIBUTE_DATA* FileAttributeData;
545
546 TRACE("GetFileAttributesExW(%S) called\n", lpFileName);
547
548
549 if (fInfoLevelId != GetFileExInfoStandard || lpFileInformation == NULL)
550 {
552 return FALSE;
553 }
554
555 /* Validate and translate the filename */
557 &FileName,
558 NULL,
559 NULL))
560 {
561 WARN ("Invalid path '%S'\n", lpFileName);
563 return FALSE;
564 }
565
566 /* build the object attributes */
568 &FileName,
570 NULL,
571 NULL);
572
573 /* Get file attributes */
576
578 if (!NT_SUCCESS (Status))
579 {
580 WARN ("NtQueryFullAttributesFile() failed (Status %lx)\n", Status);
582 return FALSE;
583 }
584
585 FileAttributeData = (WIN32_FILE_ATTRIBUTE_DATA*)lpFileInformation;
586 FileAttributeData->dwFileAttributes = FileInformation.FileAttributes;
587 FileAttributeData->ftCreationTime.dwLowDateTime = FileInformation.CreationTime.u.LowPart;
588 FileAttributeData->ftCreationTime.dwHighDateTime = FileInformation.CreationTime.u.HighPart;
589 FileAttributeData->ftLastAccessTime.dwLowDateTime = FileInformation.LastAccessTime.u.LowPart;
590 FileAttributeData->ftLastAccessTime.dwHighDateTime = FileInformation.LastAccessTime.u.HighPart;
591 FileAttributeData->ftLastWriteTime.dwLowDateTime = FileInformation.LastWriteTime.u.LowPart;
592 FileAttributeData->ftLastWriteTime.dwHighDateTime = FileInformation.LastWriteTime.u.HighPart;
593 FileAttributeData->nFileSizeLow = FileInformation.EndOfFile.u.LowPart;
594 FileAttributeData->nFileSizeHigh = FileInformation.EndOfFile.u.HighPart;
595
596 return TRUE;
597}
598
599/*
600 * @implemented
601 */
604 GET_FILEEX_INFO_LEVELS fInfoLevelId,
605 LPVOID lpFileInformation)
606{
607 PWCHAR FileNameW;
608
609 if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
610 return FALSE;
611
612 return GetFileAttributesExW(FileNameW, fInfoLevelId, lpFileInformation);
613}
614
615
616/*
617 * @implemented
618 */
621{
622 PWSTR FileNameW;
623
624 if (!lpFileName || !(FileNameW = FilenameA2W(lpFileName, FALSE)))
626
627 return GetFileAttributesW(FileNameW);
628}
629
630
631/*
632 * @implemented
633 */
634DWORD
635WINAPI
637{
642
643 /* Get the NT path name */
645 {
648 }
649
650 /* Prepare for querying attributes */
653 NULL, NULL);
654 /* Simply query attributes */
656 if (!NT_SUCCESS(Status))
657 {
658 /* It failed? Is it a DOS device? */
660 {
662 }
663
664 /* Set the error otherwise */
667 }
668
669 /* Return the file attributes */
670 return FileInformation.FileAttributes;
671}
672
673
674/*
675 * @implemented
676 */
681{
682 FILE_BASIC_INFORMATION FileBasic;
685
687
689 {
691 return FALSE;
692 }
693
696 &FileBasic,
697 sizeof(FileBasic),
699 if (NT_SUCCESS(Status))
700 {
701 *dwFileAttributes = FileBasic.FileAttributes;
702 return TRUE;
703 }
704
706 return FALSE;
707}
708
709
710/*
711 * @implemented
712 */
717{
718 FILE_BASIC_INFORMATION FileBasic;
721
723
725 {
727 return FALSE;
728 }
729
732 &FileBasic,
733 sizeof(FileBasic),
735 if (NT_SUCCESS(Status))
736 {
738
741 &FileBasic,
742 sizeof(FileBasic),
744 }
745
746 if (!NT_SUCCESS(Status))
747 {
749 return FALSE;
750 }
751
752 return TRUE;
753}
754
755
756/*
757 * @implemented
758 */
763{
764 PWCHAR FileNameW;
765
766 if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
767 return FALSE;
768
769 return SetFileAttributesW(FileNameW, dwFileAttributes);
770}
771
772
773/*
774 * @implemented
775 */
776BOOL
777WINAPI
780{
782 PWSTR PathUBuffer;
784 UNICODE_STRING NtPathU;
786 RTL_RELATIVE_NAME_U RelativeName;
789
790 /* Get relative name */
791 if (!RtlDosPathNameToRelativeNtPathName_U(lpFileName, &NtPathU, NULL, &RelativeName))
792 {
794 return FALSE;
795 }
796
797 /* Save buffer to allow later freeing */
798 PathUBuffer = NtPathU.Buffer;
799
800 /* If we have relative name (and root dir), use them instead */
801 if (RelativeName.RelativeName.Length != 0)
802 {
803 NtPathU.Length = RelativeName.RelativeName.Length;
804 NtPathU.MaximumLength = RelativeName.RelativeName.MaximumLength;
805 NtPathU.Buffer = RelativeName.RelativeName.Buffer;
806 }
807 else
808 {
809 RelativeName.ContainingDirectory = NULL;
810 }
811
812 /* Prepare the object attribute for opening the file */
815 RelativeName.ContainingDirectory, NULL);
816
817 /* Attempt to open the file, while supporting reparse point */
822 /* If opening failed, check whether it was because of reparse point support */
823 if (!NT_SUCCESS(Status))
824 {
825 /* Nope, just quit */
827 {
828 RtlReleaseRelativeName(&RelativeName);
829 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
831
832 return FALSE;
833 }
834
835 /* Yes, retry without */
840 if (!NT_SUCCESS(Status))
841 {
842 RtlReleaseRelativeName(&RelativeName);
843 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
845
846 return FALSE;
847 }
848 }
849
850 /* We don't need strings anylonger */
851 RtlReleaseRelativeName(&RelativeName);
852 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
853
854 /* Zero our structure, we'll only set file attributes */
856 /* Set the attributes, filtering only allowed attributes, and forcing normal attribute */
858
859 /* Finally, set the attributes */
862 /* Close the file */
864
865 /* If it failed, set the error and fail */
866 if (!NT_SUCCESS(Status))
867 {
869
870 return FALSE;
871 }
872
873 return TRUE;
874}
875
876/*
877 * @implemented
878 */
881 OUT LPFILETIME lpCreationTime OPTIONAL,
882 OUT LPFILETIME lpLastAccessTime OPTIONAL,
883 OUT LPFILETIME lpLastWriteTime OPTIONAL)
884{
887 FILE_BASIC_INFORMATION FileBasic;
888
890 {
892 return FALSE;
893 }
894
897 &FileBasic,
900 if (!NT_SUCCESS(Status))
901 {
903 return FALSE;
904 }
905
906 if (lpCreationTime)
907 {
908 lpCreationTime->dwLowDateTime = FileBasic.CreationTime.LowPart;
909 lpCreationTime->dwHighDateTime = FileBasic.CreationTime.HighPart;
910 }
911
912 if (lpLastAccessTime)
913 {
914 lpLastAccessTime->dwLowDateTime = FileBasic.LastAccessTime.LowPart;
915 lpLastAccessTime->dwHighDateTime = FileBasic.LastAccessTime.HighPart;
916 }
917
918 if (lpLastWriteTime)
919 {
920 lpLastWriteTime->dwLowDateTime = FileBasic.LastWriteTime.LowPart;
921 lpLastWriteTime->dwHighDateTime = FileBasic.LastWriteTime.HighPart;
922 }
923
924 return TRUE;
925}
926
927
928/*
929 * @implemented
930 */
933 CONST FILETIME *lpCreationTime OPTIONAL,
934 CONST FILETIME *lpLastAccessTime OPTIONAL,
935 CONST FILETIME *lpLastWriteTime OPTIONAL)
936{
939 FILE_BASIC_INFORMATION FileBasic;
940
942 {
944 return FALSE;
945 }
946
947 memset(&FileBasic, 0, sizeof(FILE_BASIC_INFORMATION));
948
949 if (lpCreationTime)
950 {
951 FileBasic.CreationTime.LowPart = lpCreationTime->dwLowDateTime;
952 FileBasic.CreationTime.HighPart = lpCreationTime->dwHighDateTime;
953 }
954
955 if (lpLastAccessTime)
956 {
957 FileBasic.LastAccessTime.LowPart = lpLastAccessTime->dwLowDateTime;
958 FileBasic.LastAccessTime.HighPart = lpLastAccessTime->dwHighDateTime;
959 }
960
961 if (lpLastWriteTime)
962 {
963 FileBasic.LastWriteTime.LowPart = lpLastWriteTime->dwLowDateTime;
964 FileBasic.LastWriteTime.HighPart = lpLastWriteTime->dwHighDateTime;
965 }
966
969 &FileBasic,
972 if (!NT_SUCCESS(Status))
973 {
975 return FALSE;
976 }
977
978 return TRUE;
979}
980
981
982/*
983 * The caller must have opened the file with the DesiredAccess FILE_WRITE_DATA flag set.
984 *
985 * @implemented
986 */
989{
991 FILE_END_OF_FILE_INFORMATION EndOfFileInfo;
993 FILE_POSITION_INFORMATION FilePosInfo;
995
997 {
999 return FALSE;
1000 }
1001
1002 //get current position
1004 hFile,
1006 &FilePosInfo,
1009 );
1010
1011 if (!NT_SUCCESS(Status)){
1013 return FALSE;
1014 }
1015
1016 EndOfFileInfo.EndOfFile.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1017
1018 /*
1019 NOTE:
1020 This call is not supposed to free up any space after the eof marker
1021 if the file gets truncated. We have to deallocate the space explicitly afterwards.
1022 But...most file systems dispatch both FileEndOfFileInformation
1023 and FileAllocationInformation as they were the same command.
1024
1025 */
1027 hFile,
1028 &IoStatusBlock, //out
1029 &EndOfFileInfo,
1032 );
1033
1034 if (!NT_SUCCESS(Status)){
1036 return FALSE;
1037 }
1038
1039 FileAllocationInfo.AllocationSize.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1040
1041
1043 hFile,
1044 &IoStatusBlock, //out
1048 );
1049
1050 if (!NT_SUCCESS(Status)){
1052 return FALSE;
1053 }
1054
1055 return TRUE;
1056
1057}
1058
1059
1060/*
1061 * @implemented
1062 */
1063BOOL
1064WINAPI
1066 HANDLE hFile,
1067 LONGLONG ValidDataLength
1068 )
1069{
1071 FILE_VALID_DATA_LENGTH_INFORMATION ValidDataLengthInformation;
1073
1074 ValidDataLengthInformation.ValidDataLength.QuadPart = ValidDataLength;
1075
1077 hFile,
1078 &IoStatusBlock, //out
1079 &ValidDataLengthInformation,
1082 );
1083
1084 if (!NT_SUCCESS(Status)){
1086 return FALSE;
1087 }
1088
1089 return TRUE;
1090}
1091
1092/* EOF */
DWORD dwFileAttributes
#define DECLSPEC_HOTPATCH
Definition: _mingw.h:240
LONG NTSTATUS
Definition: precomp.h:26
#define DEBUG_CHANNEL(args)
Definition: rdesktop.h:159
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:220
#define WARN(fmt,...)
Definition: precomp.h:61
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define STATUS_INVALID_HANDLE
Definition: d3dkmdt.h:40
#define NO_ERROR
Definition: dderror.h:5
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define CloseHandle
Definition: compat.h:739
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define FILE_BEGIN
Definition: compat.h:761
#define INVALID_SET_FILE_POINTER
Definition: compat.h:732
#define OPEN_EXISTING
Definition: compat.h:775
#define SetFilePointer
Definition: compat.h:743
#define SetLastError(x)
Definition: compat.h:752
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define CreateFileW
Definition: compat.h:741
#define GetFileSizeEx
Definition: compat.h:757
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
BOOL WINAPI DECLSPEC_HOTPATCH VerifyConsoleIoHandle(HANDLE hIoHandle)
Definition: console.c:1112
BOOL WINAPI SetFileValidData(HANDLE hFile, LONGLONG ValidDataLength)
Definition: fileinfo.c:1065
BOOL WINAPI GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
Definition: fileinfo.c:442
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:636
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:778
DWORD WINAPI GetCompressedFileSizeW(LPCWSTR lpFileName, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:397
BOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:760
DWORD WINAPI GetFileType(HANDLE hFile)
Definition: fileinfo.c:269
BOOL WINAPI FlushFileBuffers(IN HANDLE hFile)
Definition: fileinfo.c:25
BOOL WINAPI GetFileAttributesExA(LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
Definition: fileinfo.c:603
BOOL WINAPI SetFileAttributesByHandle(IN HANDLE hFile, IN DWORD dwFileAttributes, IN DWORD dwFlags)
Definition: fileinfo.c:714
BOOL WINAPI GetFileAttributesByHandle(IN HANDLE hFile, OUT LPDWORD dwFileAttributes, IN DWORD dwFlags)
Definition: fileinfo.c:678
BOOL WINAPI SetEndOfFile(HANDLE hFile)
Definition: fileinfo.c:988
BOOL WINAPI GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
Definition: fileinfo.c:536
BOOL WINAPI SetFileTime(IN HANDLE hFile, CONST FILETIME *lpCreationTime OPTIONAL, CONST FILETIME *lpLastAccessTime OPTIONAL, CONST FILETIME *lpLastWriteTime OPTIONAL)
Definition: fileinfo.c:932
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
BOOL WINAPI GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
Definition: fileinfo.c:880
BOOL WINAPI SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
Definition: fileinfo.c:177
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
Definition: fileinfo.c:620
PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc)
Definition: fileutils.c:18
HANDLE TranslateStdHandle(IN HANDLE hHandle)
Definition: handle.c:19
struct _FileName FileName
Definition: fatprocs.h:897
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
@ FilePositionInformation
Definition: from_kernel.h:75
@ FileEndOfFileInformation
Definition: from_kernel.h:81
@ FileCompressionInformation
Definition: from_kernel.h:89
@ FileInternalInformation
Definition: from_kernel.h:67
@ FileValidDataLengthInformation
Definition: from_kernel.h:100
@ FileAllocationInformation
Definition: from_kernel.h:80
@ FileBasicInformation
Definition: from_kernel.h:65
#define FILE_OPEN_REPARSE_POINT
Definition: from_kernel.h:46
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
@ FileFsDeviceInformation
Definition: from_kernel.h:222
@ FileFsVolumeInformation
Definition: from_kernel.h:219
#define FILE_OPEN_FOR_BACKUP_INTENT
Definition: from_kernel.h:42
Status
Definition: gdiplustypes.h:25
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
NTSTATUS NTAPI NtFlushBuffersFile(IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock)
Definition: iofunc.c:1487
#define kernel32file
Definition: kernel32.h:6
#define ZeroMemory
Definition: minwinbase.h:31
enum _GET_FILEEX_INFO_LEVELS GET_FILEEX_INFO_LEVELS
@ GetFileExInfoStandard
Definition: minwinbase.h:356
@ FileAllocationInfo
Definition: minwinbase.h:309
#define FILE_DEVICE_SERIAL_PORT
Definition: serial.c:44
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
_In_ HANDLE hFile
Definition: mswsock.h:90
NTSYSAPI ULONG NTAPI RtlIsDosDeviceName_U(_In_ PCWSTR Name)
VOID NTAPI RtlReleaseRelativeName(_In_ PRTL_RELATIVE_NAME_U RelativeName)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToRelativeNtPathName_U(_In_ PCWSTR DosName, _Out_ PUNICODE_STRING NtName, _Out_ PCWSTR *PartName, _Out_ PRTL_RELATIVE_NAME_U RelativeName)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3953
#define FILE_ATTRIBUTE_VALID_SET_FLAGS
Definition: nt_native.h:715
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define SYNCHRONIZE
Definition: nt_native.h:61
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
Definition: iofunc.c:3096
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
#define FILE_WRITE_ATTRIBUTES
Definition: nt_native.h:649
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define DWORD
Definition: nt_native.h:44
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
#define MAXDWORD
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
static OUT PIO_STATUS_BLOCK OUT PVOID FileInformation
Definition: pipe.c:75
NTSTATUS NTAPI NtQueryAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_BASIC_INFORMATION FileInformation)
Definition: file.c:3979
NTSTATUS NTAPI NtQueryFullAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation)
Definition: file.c:3991
#define CONST
Definition: pedump.c:81
long LONG
Definition: pedump.c:60
#define FILE_DEVICE_DISK_FILE_SYSTEM
Definition: winioctl.h:53
#define FILE_DEVICE_NAMED_PIPE
Definition: winioctl.h:62
#define FILE_DEVICE_MOUSE
Definition: winioctl.h:60
#define FILE_DEVICE_NULL
Definition: winioctl.h:66
#define FILE_DEVICE_CD_ROM
Definition: winioctl.h:47
#define FILE_DEVICE_SCREEN
Definition: winioctl.h:73
#define FILE_DEVICE_DFS
Definition: winioctl.h:51
#define FILE_DEVICE_KEYBOARD
Definition: winioctl.h:56
#define FILE_DEVICE_DATALINK
Definition: winioctl.h:50
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM
Definition: winioctl.h:48
#define FILE_DEVICE_MODEM
Definition: winioctl.h:88
#define FILE_DEVICE_PARALLEL_PORT
Definition: winioctl.h:67
#define FILE_DEVICE_CONTROLLER
Definition: winioctl.h:49
#define FILE_DEVICE_SOUND
Definition: winioctl.h:74
#define FILE_DEVICE_DISK
Definition: winioctl.h:52
#define FILE_DEVICE_PRINTER
Definition: winioctl.h:69
#define FILE_DEVICE_VIRTUAL_DISK
Definition: winioctl.h:81
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167
#define IsConsoleHandle(h)
Definition: console.h:14
#define memset(x, y, z)
Definition: compat.h:39
#define FileStandardInformation
Definition: propsheet.cpp:61
NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FsInformation, ULONG Length, FS_INFORMATION_CLASS FsInformationClass)
#define TRACE(s)
Definition: solgame.cpp:4
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
LARGE_INTEGER LastWriteTime
Definition: nt_native.h:944
LARGE_INTEGER CreationTime
Definition: nt_native.h:942
LARGE_INTEGER LastAccessTime
Definition: nt_native.h:943
LARGE_INTEGER CompressedFileSize
Definition: iotypes.h:5852
LARGE_INTEGER CurrentByteOffset
Definition: nt_native.h:958
UNICODE_STRING RelativeName
Definition: rtltypes.h:1374
HANDLE ContainingDirectory
Definition: rtltypes.h:1375
USHORT MaximumLength
Definition: env_spec_w32.h:370
uint16_t * PWSTR
Definition: typedefs.h:56
int64_t LONGLONG
Definition: typedefs.h:68
uint32_t * LPDWORD
Definition: typedefs.h:59
#define IN
Definition: typedefs.h:39
int32_t * PLONG
Definition: typedefs.h:58
uint16_t * PWCHAR
Definition: typedefs.h:56
#define OUT
Definition: typedefs.h:40
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONGLONG QuadPart
Definition: typedefs.h:114
ULONG LowPart
Definition: typedefs.h:106
struct _LARGE_INTEGER::@2449 u
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define FILE_END
Definition: winbase.h:116
_In_ LPCSTR lpFileName
Definition: winbase.h:2824
#define FILE_TYPE_UNKNOWN
Definition: winbase.h:282
#define FILE_CURRENT
Definition: winbase.h:115
#define INVALID_FILE_SIZE
Definition: winbase.h:528
#define FILE_TYPE_CHAR
Definition: winbase.h:284
#define FILE_TYPE_PIPE
Definition: winbase.h:285
#define FILE_TYPE_DISK
Definition: winbase.h:283
#define WINAPI
Definition: msvc.h:6
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228
#define ERROR_NEGATIVE_SEEK
Definition: winerror.h:325
#define ERROR_BAD_PATHNAME
Definition: winerror.h:355
const char * LPCSTR
Definition: xmlstorage.h:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180