@@ -38,7 +38,6 @@ pub type ULONG = c_ulong;
3838
3939pub type LPBOOL = * mut BOOL ;
4040pub type LPBYTE = * mut BYTE ;
41- pub type LPBY_HANDLE_FILE_INFORMATION = * mut BY_HANDLE_FILE_INFORMATION ;
4241pub type LPCSTR = * const CHAR ;
4342pub type LPCVOID = * const c_void ;
4443pub type LPCWSTR = * const WCHAR ;
@@ -345,20 +344,6 @@ pub struct WIN32_FILE_ATTRIBUTE_DATA {
345344 pub nFileSizeLow : DWORD ,
346345}
347346
348- #[ repr( C ) ]
349- pub struct BY_HANDLE_FILE_INFORMATION {
350- pub dwFileAttributes : DWORD ,
351- pub ftCreationTime : FILETIME ,
352- pub ftLastAccessTime : FILETIME ,
353- pub ftLastWriteTime : FILETIME ,
354- pub dwVolumeSerialNumber : DWORD ,
355- pub nFileSizeHigh : DWORD ,
356- pub nFileSizeLow : DWORD ,
357- pub nNumberOfLinks : DWORD ,
358- pub nFileIndexHigh : DWORD ,
359- pub nFileIndexLow : DWORD ,
360- }
361-
362347#[ repr( C ) ]
363348#[ allow( dead_code) ] // we only use some variants
364349pub enum FILE_INFO_BY_HANDLE_CLASS {
@@ -661,6 +646,22 @@ pub struct timeval {
661646// Functions forbidden when targeting UWP
662647#[ cfg( not( target_vendor = "uwp" ) ) ]
663648ifdef ! {
649+ #[ repr( C ) ]
650+ pub struct BY_HANDLE_FILE_INFORMATION {
651+ pub dwFileAttributes: DWORD ,
652+ pub ftCreationTime: FILETIME ,
653+ pub ftLastAccessTime: FILETIME ,
654+ pub ftLastWriteTime: FILETIME ,
655+ pub dwVolumeSerialNumber: DWORD ,
656+ pub nFileSizeHigh: DWORD ,
657+ pub nFileSizeLow: DWORD ,
658+ pub nNumberOfLinks: DWORD ,
659+ pub nFileIndexHigh: DWORD ,
660+ pub nFileIndexLow: DWORD ,
661+ }
662+
663+ pub type LPBY_HANDLE_FILE_INFORMATION = * mut BY_HANDLE_FILE_INFORMATION ;
664+
664665 pub const HANDLE_FLAG_INHERIT : DWORD = 0x00000001 ;
665666
666667 pub const TOKEN_READ : DWORD = 0x20008 ;
@@ -676,6 +677,9 @@ ifdef! {
676677 pub fn GetUserProfileDirectoryW ( hToken: HANDLE ,
677678 lpProfileDir: LPWSTR ,
678679 lpcchSize: * mut DWORD ) -> BOOL ;
680+ pub fn GetFileInformationByHandle ( hFile: HANDLE ,
681+ lpFileInformation: LPBY_HANDLE_FILE_INFORMATION )
682+ -> BOOL ;
679683 pub fn SetHandleInformation ( hObject: HANDLE ,
680684 dwMask: DWORD ,
681685 dwFlags: DWORD ) -> BOOL ;
@@ -691,7 +695,20 @@ ifdef! {
691695ifdef ! {
692696 pub const BCRYPT_USE_SYSTEM_PREFERRED_RNG : DWORD = 0x00000002 ;
693697
698+ #[ repr( C ) ]
699+ pub struct FILE_STANDARD_INFO {
700+ pub AllocationSize : LARGE_INTEGER ,
701+ pub EndOfFile : LARGE_INTEGER ,
702+ pub NumberOfLink : DWORD ,
703+ pub DeletePending : BOOLEAN ,
704+ pub Directory : BOOLEAN ,
705+ }
706+
694707 extern "system" {
708+ pub fn GetFileInformationByHandleEx ( hFile: HANDLE ,
709+ fileInfoClass: FILE_INFO_BY_HANDLE_CLASS ,
710+ lpFileInformation: LPVOID ,
711+ dwBufferSize: DWORD ) -> BOOL ;
695712 pub fn BCryptGenRandom ( hAlgorithm: LPVOID , pBuffer: * mut u8 ,
696713 cbBuffer: ULONG , dwFlags: ULONG ) -> LONG ;
697714 }
@@ -754,10 +771,6 @@ extern "system" {
754771 pub fn RemoveDirectoryW ( lpPathName : LPCWSTR ) -> BOOL ;
755772 pub fn SetFileAttributesW ( lpFileName : LPCWSTR ,
756773 dwFileAttributes : DWORD ) -> BOOL ;
757- pub fn GetFileInformationByHandle ( hFile : HANDLE ,
758- lpFileInformation : LPBY_HANDLE_FILE_INFORMATION )
759- -> BOOL ;
760-
761774 pub fn SetLastError ( dwErrCode : DWORD ) ;
762775 pub fn GetCommandLineW ( ) -> * mut LPCWSTR ;
763776 pub fn GetTempPathW ( nBufferLength : DWORD ,
0 commit comments