implemented SetFileAttributesByHandle() and GetFileAttributesByHandle()
Modified: trunk/reactos/lib/kernel32/file/file.c
Modified: trunk/reactos/lib/kernel32/kernel32.def

Modified: trunk/reactos/lib/kernel32/file/file.c
--- trunk/reactos/lib/kernel32/file/file.c	2005-08-24 23:44:27 UTC (rev 17529)
+++ trunk/reactos/lib/kernel32/file/file.c	2005-08-24 23:59:03 UTC (rev 17530)
@@ -964,7 +964,81 @@
   return Result ? FileAttributeData.dwFileAttributes : INVALID_FILE_ATTRIBUTES;
 }
 
+
+/*
+ * @implemented
+ */
 BOOL STDCALL
+GetFileAttributesByHandle(IN HANDLE hFile,
+                          OUT LPDWORD dwFileAttributes,
+                          IN DWORD dwFlags)
+{
+    FILE_BASIC_INFORMATION FileBasic;
+    IO_STATUS_BLOCK IoStatusBlock;
+    NTSTATUS Status;
+    
+    UNREFERENCED_PARAMETER(dwFlags);
+    
+    Status = NtQueryInformationFile(hFile,
+                                    &IoStatusBlock,
+                                    &FileBasic,
+                                    sizeof(FileBasic),
+                                    FileBasicInformation);
+    if (NT_SUCCESS(Status))
+    {
+        *dwFileAttributes = FileBasic.FileAttributes;
+        return TRUE;
+    }
+    
+    SetLastErrorByStatus(Status);
+    return FALSE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+SetFileAttributesByHandle(IN HANDLE hFile,
+                          IN DWORD dwFileAttributes,
+                          IN DWORD dwFlags)
+{
+    FILE_BASIC_INFORMATION FileBasic;
+    IO_STATUS_BLOCK IoStatusBlock;
+    NTSTATUS Status;
+
+    UNREFERENCED_PARAMETER(dwFlags);
+
+    Status = NtQueryInformationFile(hFile,
+                                    &IoStatusBlock,
+                                    &FileBasic,
+                                    sizeof(FileBasic),
+                                    FileBasicInformation);
+    if (NT_SUCCESS(Status))
+    {
+        FileBasic.FileAttributes = dwFileAttributes;
+        
+        Status = NtSetInformationFile(hFile,
+                                      &IoStatusBlock,
+                                      &FileBasic,
+                                      sizeof(FileBasic),
+                                      FileBasicInformation);
+    }
+
+    if (!NT_SUCCESS(Status))
+    {
+        SetLastErrorByStatus(Status);
+        return FALSE;
+    }
+    
+    return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
 SetFileAttributesA(
    LPCSTR lpFileName,
 	DWORD dwFileAttributes)

Modified: trunk/reactos/lib/kernel32/kernel32.def
--- trunk/reactos/lib/kernel32/kernel32.def	2005-08-24 23:44:27 UTC (rev 17529)
+++ trunk/reactos/lib/kernel32/kernel32.def	2005-08-24 23:59:03 UTC (rev 17530)
@@ -372,6 +372,7 @@
 GetExpandedNameW@8
 GetFileAttributesA@4
 GetFileAttributesW@4
+GetFileAttributesByHandle@12
 GetFileAttributesExA@12
 GetFileAttributesExW@12
 GetFileInformationByHandle@8
@@ -805,6 +806,7 @@
 SetFileApisToOEM@0
 SetFileAttributesA@8
 SetFileAttributesW@8
+SetFileAttributesByHandle@12
 SetFilePointer@16
 SetFilePointerEx@20
 SetFileShortNameA@8