NtFsControlFile
От: temofey  
Дата: 15.12.04 15:19
Оценка:
Есть функция в ntdll.dll

NTSTATUS NtFsControlFile(
IN HANDLE FileHandle,
IN HANDLE Event, // optional
IN PIO_APC_ROUTINE UserApcRoutine, // optional
IN PVOID UserApcContext, // optional
OUT PIO_STATUS_BLOCK UserIoStatus,
IN ULONG FsControlCode,
IN PVOID InputBuffer, // optional
IN ULONG InputBufferLength, // optional
OUT PVOID OutputBuffer, // optional
IN ULONG OutputBufferLength // optional
);

Описана Руссиновичем здесь: http://www.sysinternals.com/ntw2k/info/defrag.shtml
Необходимо дернуть ее из среды .Net

[DllImport("NTDLL.DLL", SetLastError = true)]
static extern uint NtFsControlFile(
[In] IntPtr FileHandle,
[In] IntPtr Event,
[In] ???, // ТУТ НЕЗНАЮ
[In] IntPtr UserApcContext,
[Out] ref IO_STATUS_BLOCK UserIoStatus,
[In] ulong FsControlCode,
[In] IntPtr InputBuffer,
[In] ulong InputBufferLength,
[Out] IntPtr lpOutBuffer,
[In] ulong OutputBufferLength
);

Незнаю как должным образом определить PIO_APC_ROUTINE
На с++ она определяется следующим образом:
//
// Apc Routine (see NTDDK.H)
//
typedef VOID (*PIO_APC_ROUTINE) (
PVOID ApcContext,
PIO_STATUS_BLOCK IoStatusBlock,
ULONG Reserved
);
Где PIO_STATUS_BLOCK

typedef struct _IO_STATUS_BLOCK {
NTSTATUS Status;
ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

Как поступать на с# — описывать-ли ее как делигат — мне непонятно. Если кто поможет разьяснить ситуацию — буду благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.