ReactOS 0.4.17-dev-769-g1500a35
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 RtlFreeHeap(RtlGetProcessHeap(), 0, FileName.Buffer);
657 if (!NT_SUCCESS(Status))
658 {
659 /* It failed? Is it a DOS device? */
661 {
663 }
664
665 /* Set the error otherwise */
668 }
669
670 /* Return the file attributes */
671 return FileInformation.FileAttributes;
672}
673
674
675/*
676 * @implemented
677 */
682{
683 FILE_BASIC_INFORMATION FileBasic;
686
688
690 {
692 return FALSE;
693 }
694
697 &FileBasic,
698 sizeof(FileBasic),
700 if (NT_SUCCESS(Status))
701 {
702 *dwFileAttributes = FileBasic.FileAttributes;
703 return TRUE;
704 }
705
707 return FALSE;
708}
709
710
711/*
712 * @implemented
713 */
718{
719 FILE_BASIC_INFORMATION FileBasic;
722
724
726 {
728 return FALSE;
729 }
730
733 &FileBasic,
734 sizeof(FileBasic),
736 if (NT_SUCCESS(Status))
737 {
739
742 &FileBasic,
743 sizeof(FileBasic),
745 }
746
747 if (!NT_SUCCESS(Status))
748 {
750 return FALSE;
751 }
752
753 return TRUE;
754}
755
756
757/*
758 * @implemented
759 */
764{
765 PWCHAR FileNameW;
766
767 if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
768 return FALSE;
769
770 return SetFileAttributesW(FileNameW, dwFileAttributes);
771}
772
773
774/*
775 * @implemented
776 */
777BOOL
778WINAPI
781{
783 PWSTR PathUBuffer;
785 UNICODE_STRING NtPathU;
787 RTL_RELATIVE_NAME_U RelativeName;
790
791 /* Get relative name */
792 if (!RtlDosPathNameToRelativeNtPathName_U(lpFileName, &NtPathU, NULL, &RelativeName))
793 {
795 return FALSE;
796 }
797
798 /* Save buffer to allow later freeing */
799 PathUBuffer = NtPathU.Buffer;
800
801 /* If we have relative name (and root dir), use them instead */
802 if (RelativeName.RelativeName.Length != 0)
803 {
804 NtPathU.Length = RelativeName.RelativeName.Length;
805 NtPathU.MaximumLength = RelativeName.RelativeName.MaximumLength;
806 NtPathU.Buffer = RelativeName.RelativeName.Buffer;
807 }
808 else
809 {
810 RelativeName.ContainingDirectory = NULL;
811 }
812
813 /* Prepare the object attribute for opening the file */
816 RelativeName.ContainingDirectory, NULL);
817
818 /* Attempt to open the file, while supporting reparse point */
823 /* If opening failed, check whether it was because of reparse point support */
824 if (!NT_SUCCESS(Status))
825 {
826 /* Nope, just quit */
828 {
829 RtlReleaseRelativeName(&RelativeName);
830 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
832
833 return FALSE;
834 }
835
836 /* Yes, retry without */
841 if (!NT_SUCCESS(Status))
842 {
843 RtlReleaseRelativeName(&RelativeName);
844 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
846
847 return FALSE;
848 }
849 }
850
851 /* We don't need strings anylonger */
852 RtlReleaseRelativeName(&RelativeName);
853 RtlFreeHeap(RtlGetProcessHeap(), 0, PathUBuffer);
854
855 /* Zero our structure, we'll only set file attributes */
857 /* Set the attributes, filtering only allowed attributes, and forcing normal attribute */
859
860 /* Finally, set the attributes */
863 /* Close the file */
865
866 /* If it failed, set the error and fail */
867 if (!NT_SUCCESS(Status))
868 {
870
871 return FALSE;
872 }
873
874 return TRUE;
875}
876
877/*
878 * @implemented
879 */
882 OUT LPFILETIME lpCreationTime OPTIONAL,
883 OUT LPFILETIME lpLastAccessTime OPTIONAL,
884 OUT LPFILETIME lpLastWriteTime OPTIONAL)
885{
888 FILE_BASIC_INFORMATION FileBasic;
889
891 {
893 return FALSE;
894 }
895
898 &FileBasic,
901 if (!NT_SUCCESS(Status))
902 {
904 return FALSE;
905 }
906
907 if (lpCreationTime)
908 {
909 lpCreationTime->dwLowDateTime = FileBasic.CreationTime.LowPart;
910 lpCreationTime->dwHighDateTime = FileBasic.CreationTime.HighPart;
911 }
912
913 if (lpLastAccessTime)
914 {
915 lpLastAccessTime->dwLowDateTime = FileBasic.LastAccessTime.LowPart;
916 lpLastAccessTime->dwHighDateTime = FileBasic.LastAccessTime.HighPart;
917 }
918
919 if (lpLastWriteTime)
920 {
921 lpLastWriteTime->dwLowDateTime = FileBasic.LastWriteTime.LowPart;
922 lpLastWriteTime->dwHighDateTime = FileBasic.LastWriteTime.HighPart;
923 }
924
925 return TRUE;
926}
927
928
929/*
930 * @implemented
931 */
934 CONST FILETIME *lpCreationTime OPTIONAL,
935 CONST FILETIME *lpLastAccessTime OPTIONAL,
936 CONST FILETIME *lpLastWriteTime OPTIONAL)
937{
940 FILE_BASIC_INFORMATION FileBasic;
941
943 {
945 return FALSE;
946 }
947
948 memset(&FileBasic, 0, sizeof(FILE_BASIC_INFORMATION));
949
950 if (lpCreationTime)
951 {
952 FileBasic.CreationTime.LowPart = lpCreationTime->dwLowDateTime;
953 FileBasic.CreationTime.HighPart = lpCreationTime->dwHighDateTime;
954 }
955
956 if (lpLastAccessTime)
957 {
958 FileBasic.LastAccessTime.LowPart = lpLastAccessTime->dwLowDateTime;
959 FileBasic.LastAccessTime.HighPart = lpLastAccessTime->dwHighDateTime;
960 }
961
962 if (lpLastWriteTime)
963 {
964 FileBasic.LastWriteTime.LowPart = lpLastWriteTime->dwLowDateTime;
965 FileBasic.LastWriteTime.HighPart = lpLastWriteTime->dwHighDateTime;
966 }
967
970 &FileBasic,
973 if (!NT_SUCCESS(Status))
974 {
976 return FALSE;
977 }
978
979 return TRUE;
980}
981
982
983/*
984 * The caller must have opened the file with the DesiredAccess FILE_WRITE_DATA flag set.
985 *
986 * @implemented
987 */
990{
992 FILE_END_OF_FILE_INFORMATION EndOfFileInfo;
994 FILE_POSITION_INFORMATION FilePosInfo;
996
998 {
1000 return FALSE;
1001 }
1002
1003 //get current position
1005 hFile,
1007 &FilePosInfo,
1010 );
1011
1012 if (!NT_SUCCESS(Status)){
1014 return FALSE;
1015 }
1016
1017 EndOfFileInfo.EndOfFile.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1018
1019 /*
1020 NOTE:
1021 This call is not supposed to free up any space after the eof marker
1022 if the file gets truncated. We have to deallocate the space explicitly afterwards.
1023 But...most file systems dispatch both FileEndOfFileInformation
1024 and FileAllocationInformation as they were the same command.
1025
1026 */
1028 hFile,
1029 &IoStatusBlock, //out
1030 &EndOfFileInfo,
1033 );
1034
1035 if (!NT_SUCCESS(Status)){
1037 return FALSE;
1038 }
1039
1040 FileAllocationInfo.AllocationSize.QuadPart = FilePosInfo.CurrentByteOffset.QuadPart;
1041
1042
1044 hFile,
1045 &IoStatusBlock, //out
1049 );
1050
1051 if (!NT_SUCCESS(Status)){
1053 return FALSE;
1054 }
1055
1056 return TRUE;
1057
1058}
1059
1060
1061/*
1062 * @implemented
1063 */
1064BOOL
1065WINAPI
1067 HANDLE hFile,
1068 LONGLONG ValidDataLength
1069 )
1070{
1072 FILE_VALID_DATA_LENGTH_INFORMATION ValidDataLengthInformation;
1074
1075 ValidDataLengthInformation.ValidDataLength.QuadPart = ValidDataLength;
1076
1078 hFile,
1079 &IoStatusBlock, //out
1080 &ValidDataLengthInformation,
1083 );
1084
1085 if (!NT_SUCCESS(Status)){
1087 return FALSE;
1088 }
1089
1090 return TRUE;
1091}
1092
1093/* 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
_In_ PIO_STATUS_BLOCK IoStatusBlock
Definition: dispmprt.h:608
#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:1066
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:779
DWORD WINAPI GetCompressedFileSizeW(LPCWSTR lpFileName, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:397
BOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:761
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:715
BOOL WINAPI GetFileAttributesByHandle(IN HANDLE hFile, OUT LPDWORD dwFileAttributes, IN DWORD dwFlags)
Definition: fileinfo.c:679
BOOL WINAPI SetEndOfFile(HANDLE hFile)
Definition: fileinfo.c:989
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:933
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:881
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:24
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:115
_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:3951
#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:3429
#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 OUT PVOID FileInformation
Definition: pipe.c:100
NTSTATUS NTAPI NtQueryAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_BASIC_INFORMATION FileInformation)
Definition: file.c:3977
NTSTATUS NTAPI NtQueryFullAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation)
Definition: file.c:3989
#define CONST
Definition: pedump.c:81
short WCHAR
Definition: pedump.c:58
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
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
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:1382
HANDLE ContainingDirectory
Definition: rtltypes.h:1383
USHORT MaximumLength
Definition: env_spec_w32.h:370
uint16_t * PWSTR
Definition: typedefs.h:56
const char * LPCSTR
Definition: typedefs.h:52
const uint16_t * LPCWSTR
Definition: typedefs.h:57
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::@2641 u
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define FILE_END
Definition: winbase.h:117
_In_ LPCSTR lpFileName
Definition: winbase.h:2800
#define FILE_TYPE_UNKNOWN
Definition: winbase.h:283
#define FILE_CURRENT
Definition: winbase.h:116
#define INVALID_FILE_SIZE
Definition: winbase.h:528
#define FILE_TYPE_CHAR
Definition: winbase.h:285
#define FILE_TYPE_PIPE
Definition: winbase.h:286
#define FILE_TYPE_DISK
Definition: winbase.h:284
#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