Used NtQueryFullAttributesFile instead of NtOpenFile/NtQueryInformationFile/NtClose in GetFileAttributesExW (suggested by Thomas Weidenmueller). Modified: trunk/reactos/lib/kernel32/file/file.c _____
Modified: trunk/reactos/lib/kernel32/file/file.c --- trunk/reactos/lib/kernel32/file/file.c 2005-09-24 18:04:13 UTC (rev 18028) +++ trunk/reactos/lib/kernel32/file/file.c 2005-09-24 18:09:06 UTC (rev 18029) @@ -835,9 +835,7 @@
{ FILE_NETWORK_OPEN_INFORMATION FileInformation; OBJECT_ATTRIBUTES ObjectAttributes; - IO_STATUS_BLOCK IoStatusBlock; UNICODE_STRING FileName; - HANDLE FileHandle; NTSTATUS Status; WIN32_FILE_ATTRIBUTE_DATA* FileAttributeData;
@@ -868,36 +866,18 @@ NULL, NULL);
- /* Open the file */ - Status = NtOpenFile (&FileHandle, - SYNCHRONIZE | FILE_READ_ATTRIBUTES, - &ObjectAttributes, - &IoStatusBlock, - 0, - FILE_SYNCHRONOUS_IO_NONALERT); + /* Get file attributes */ + Status = NtQueryFullAttributesFile(&ObjectAttributes, + &FileInformation); + RtlFreeUnicodeString (&FileName); if (!NT_SUCCESS (Status)) { - DPRINT ("NtOpenFile() failed %x (Status %lx)\n", &ObjectAttributes, Status); + DPRINT ("NtQueryFullAttributesFile() failed (Status %lx)\n", Status); SetLastErrorByStatus (Status); return FALSE; }
- /* Get file attributes */ - Status = NtQueryInformationFile (FileHandle, - &IoStatusBlock, - &FileInformation, - sizeof(FILE_NETWORK_OPEN_INFORMATION), - FileNetworkOpenInformation); - NtClose (FileHandle); - - if (!NT_SUCCESS (Status)) - { - DPRINT1 ("NtQueryInformationFile() failed (Status %lx)\n", Status); - SetLastErrorByStatus (Status); - return FALSE; - } - FileAttributeData = (WIN32_FILE_ATTRIBUTE_DATA*)lpFileInformation; FileAttributeData->dwFileAttributes = FileInformation.FileAttributes; FileAttributeData->ftCreationTime.dwLowDateTime = FileInformation.CreationTime.u.LowPart;