GetFileInformationByHandle (kernel32)
Last changed: imaginarydevelopment@googlemail.com-50.193.161.217

.
Summary

C# Signature:

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool GetFileInformationByHandleEx(IntPtr hFile, FILE_INFO_BY_HANDLE_CLASS infoClass, out FILE_ID_BOTH_DIR_INFO dirInfo, uint dwBufferSize);

VB Signature:

Declare Function GetFileInformationByHandleEx Lib "kernel32.dll" (TODO) As TODO

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

http://www.pinvoke.net/default.aspx/Enums/FILE_INFO_BY_HANDLE_CLASS.html#

http://www.pinvoke.net/default.aspx/Structures/FILE_ID_BOTH_DIR_INFO.html

http://www.pinvoke.net/default.aspx/Structures.LargeInteger

Tips & Tricks:

Please add some!

Sample Code:

    internal static Int64 GetDirectoryId(string dir)
    {
        var handle = CreateFile(dir, FileAccess.Read, FileShare.Read, IntPtr.Zero, FileMode.Open, 0x02000000 | 0x00000080, IntPtr.Zero);
        var fileStruct = new FILE_ID_BOTH_DIR_INFO();
        GetFileInformationByHandleEx(handle, FILE_INFO_BY_HANDLE_CLASS.FileIdBothDirectoryInfo, out fileStruct, (uint)Marshal.SizeOf(fileStruct));
        CloseHandle(handle);
        var win32Error = Marshal.GetLastWin32Error();
        if (win32Error != 0)
        throw new Win32Exception();

        return fileStruct.FileId.QuadPart;
    }

Documentation