コード例 #1
0
        unsafe private void SetupMFT_Enum_DataBuffer(ref IntPtr medBuffer, IntPtr changeJournalRootHandle)
        {
            uint bytesReturned = 0;

            WinApi.USN_JOURNAL_DATA ujd = new WinApi.USN_JOURNAL_DATA();

            bool bOk = WinApi.DeviceIoControl(
                changeJournalRootHandle,                  // Handle to drive
                WinApi.FSCTL_QUERY_USN_JOURNAL,           // IO Control Code
                IntPtr.Zero,                              // In Buffer
                0,                                        // In Buffer Size
                out ujd,                                  // Out Buffer
                sizeof(WinApi.USN_JOURNAL_DATA),          // Size Of Out Buffer
                out bytesReturned,                        // Bytes Returned
                IntPtr.Zero                               // lpOverlapped
                );

            if (bOk)
            {
                WinApi.MFT_ENUM_DATA med;
                med.StartFileReferenceNumber = 0;
                med.LowUsn  = 0;
                med.HighUsn = ujd.NextUsn;
                int sizeMftEnumData = Marshal.SizeOf(med);
                medBuffer = Marshal.AllocHGlobal(sizeMftEnumData);
                WinApi.ZeroMemory(medBuffer, sizeMftEnumData);
                Marshal.StructureToPtr(med, medBuffer, true);
            }
            else
            {
                throw new IOException("DeviceIoControl() returned false", new Win32Exception(Marshal.GetLastWin32Error()));
            }
        }
コード例 #2
0
ファイル: Volume.cs プロジェクト: rasberry/NTFSDirect
        private unsafe void SetupMFT_Enum_DataBuffer(ref IntPtr medBuffer, IntPtr changeJournalRootHandle)
        {
            uint bytesReturned = 0;
            WinApi.USN_JOURNAL_DATA ujd = new WinApi.USN_JOURNAL_DATA ();

            bool bOk = WinApi.DeviceIoControl (
                changeJournalRootHandle,                           // Handle to drive
                WinApi.FSCTL_QUERY_USN_JOURNAL,   // IO Control Code
                IntPtr.Zero,                // In Buffer
                0,                          // In Buffer Size
                out ujd,                    // Out Buffer
                sizeof(WinApi.USN_JOURNAL_DATA),  // Size Of Out Buffer
                out bytesReturned,          // Bytes Returned
                IntPtr.Zero               // lpOverlapped
            );
            if (bOk) {
                WinApi.MFT_ENUM_DATA med;
                med.StartFileReferenceNumber = 0;
                med.LowUsn = 0;
                med.HighUsn = ujd.NextUsn;
                int sizeMftEnumData = Marshal.SizeOf (med);
                medBuffer = Marshal.AllocHGlobal (sizeMftEnumData);
                WinApi.ZeroMemory (medBuffer, sizeMftEnumData);
                Marshal.StructureToPtr (med, medBuffer, true);
            } else {
                throw new IOException ("DeviceIoControl() returned false", new Win32Exception (Marshal.GetLastWin32Error ()));
            }
        }