/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: ntddft2.h Abstract: This header file defines new IOCTLs for the FTDISK driver to support the new FT API. Author: Norbert Kusters 13-July-1996 Notes: Revision History: --*/ #ifndef _NTDDFT2_ #define _NTDDFT2_ #if _MSC_VER > 1000 #pragma once #endif #include #ifdef __cplusplus extern "C" { #endif // // The name of the control device for the FT disk driver. // #define DD_FT_CONTROL_DEVICE_NAME L"\\Device\\FtControl" #define DD_DOS_FT_CONTROL_NAME L"\\\\.\\FtControl" // // Control codes handled by the 'FtControl' device. // #define FTCONTROLTYPE ((ULONG) 'g') #define FT_CREATE_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define FT_BREAK_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define FT_ENUMERATE_LOGICAL_DISKS CTL_CODE(FTCONTROLTYPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_QUERY_LOGICAL_DISK_INFORMATION CTL_CODE(FTCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_ORPHAN_LOGICAL_DISK_MEMBER CTL_CODE(FTCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define FT_REPLACE_LOGICAL_DISK_MEMBER CTL_CODE(FTCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_INITIALIZE_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_CHECK_IO CTL_CODE(FTCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_SET_DRIVE_LETTER_FOR_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) #define FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION CTL_CODE(FTCONTROLTYPE, 12, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_CHANGE_NOTIFY CTL_CODE(FTCONTROLTYPE, 13, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_STOP_SYNC_OPERATIONS CTL_CODE(FTCONTROLTYPE, 14, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // // Control codes handles by FT logical disks. // #define FT_QUERY_LOGICAL_DISK_ID CTL_CODE(FTCONTROLTYPE, 100, METHOD_BUFFERED, FILE_READ_ACCESS) #define FT_CREATE_PARTITION_LOGICAL_DISK CTL_CODE(FTCONTROLTYPE, 101, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) // // Input parameter for FT_CREATE_LOGICAL_DISK. // typedef struct _FT_CREATE_LOGICAL_DISK_INPUT { FT_LOGICAL_DISK_TYPE LogicalDiskType; USHORT NumberOfMembers; USHORT ConfigurationInformationSize; FT_LOGICAL_DISK_ID MemberArray[1]; } FT_CREATE_LOGICAL_DISK_INPUT, *PFT_CREATE_LOGICAL_DISK_INPUT; // // Output parameter for FT_CREATE_LOGICAL_DISK. // typedef struct _FT_CREATE_LOGICAL_DISK_OUTPUT { FT_LOGICAL_DISK_ID NewLogicalDiskId; } FT_CREATE_LOGICAL_DISK_OUTPUT, *PFT_CREATE_LOGICAL_DISK_OUTPUT; // // Input parameter for FT_BREAK_LOGICAL_DISK. // typedef struct _FT_BREAK_LOGICAL_DISK_INPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; } FT_BREAK_LOGICAL_DISK_INPUT, *PFT_BREAK_LOGICAL_DISK_INPUT; // // Output parameter for FT_ENUMERATE_LOGICAL_DISKS. // typedef struct _FT_ENUMERATE_LOGICAL_DISKS_OUTPUT { ULONG NumberOfRootLogicalDisks; ULONG Reserved; FT_LOGICAL_DISK_ID RootLogicalDiskIds[1]; } FT_ENUMERATE_LOGICAL_DISKS_OUTPUT, *PFT_ENUMERATE_LOGICAL_DISKS_OUTPUT; // // Input parameter for FT_QUERY_LOGICAL_DISK_INFORMATION. // typedef struct _FT_QUERY_LOGICAL_DISK_INFORMATION_INPUT { FT_LOGICAL_DISK_ID LogicalDiskId; } FT_QUERY_LOGICAL_DISK_INFORMATION_INPUT, *PFT_QUERY_LOGICAL_DISK_INFORMATION_INPUT; // // Output parameter for FT_QUERY_LOGICAL_DISK_INFORMATION. // typedef struct _FT_QUERY_LOGICAL_DISK_INFORMATION_OUTPUT { FT_LOGICAL_DISK_TYPE LogicalDiskType; LONGLONG VolumeSize; USHORT NumberOfMembers; USHORT ConfigurationInformationSize; USHORT StateInformationSize; USHORT Reserved; FT_LOGICAL_DISK_ID MemberArray[1]; } FT_QUERY_LOGICAL_DISK_INFORMATION_OUTPUT, *PFT_QUERY_LOGICAL_DISK_INFORMATION_OUTPUT; // // Input parameter for FT_ORPHAN_LOGICAL_DISK_MEMBER. // typedef struct _FT_ORPHAN_LOGICAL_DISK_MEMBER_INPUT { FT_LOGICAL_DISK_ID LogicalDiskId; USHORT MemberNumberToOrphan; USHORT Reserved[3]; } FT_ORPHAN_LOGICAL_DISK_MEMBER_INPUT, *PFT_ORPHAN_LOGICAL_DISK_MEMBER_INPUT; // // Input parameter for FT_REPLACE_LOGICAL_DISK_MEMBER. // typedef struct _FT_REPLACE_LOGICAL_DISK_MEMBER_INPUT { FT_LOGICAL_DISK_ID LogicalDiskId; USHORT MemberNumberToReplace; USHORT Reserved[3]; FT_LOGICAL_DISK_ID NewMemberLogicalDiskId; } FT_REPLACE_LOGICAL_DISK_MEMBER_INPUT, *PFT_REPLACE_LOGICAL_DISK_MEMBER_INPUT; // // Output parameter for FT_REPLACE_LOGICAL_DISK_MEMBER. // typedef struct _FT_REPLACE_LOGICAL_DISK_MEMBER_OUTPUT { FT_LOGICAL_DISK_ID NewLogicalDiskId; } FT_REPLACE_LOGICAL_DISK_MEMBER_OUTPUT, *PFT_REPLACE_LOGICAL_DISK_MEMBER_OUTPUT; // // Input parameter for FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK. // typedef struct _FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK_INPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; } FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK_INPUT, *PFT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK_INPUT; // // Output parameter for FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK. // typedef struct _FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK_OUTPUT { USHORT NumberOfCharactersInNtDeviceName; WCHAR NtDeviceName[1]; } FT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK_OUTPUT, *PFT_QUERY_NT_DEVICE_NAME_FOR_LOGICAL_DISK_OUTPUT; // // Input parameter for FT_INITIALIZE_LOGICAL_DISK. // typedef struct _FT_INITIALIZE_LOGICAL_DISK_INPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; BOOLEAN RegenerateOrphans; } FT_INITIALIZE_LOGICAL_DISK_INPUT, *PFT_INITIALIZE_LOGICAL_DISK_INPUT; // // Input parameter for FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK. // typedef struct _FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK_INPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; } FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK_INPUT, *PFT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK_INPUT; // // Output parameter for FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK. // typedef struct _FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK_OUTPUT { UCHAR DriveLetter; } FT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK_OUTPUT, *PFT_QUERY_DRIVE_LETTER_FOR_LOGICAL_DISK_OUTPUT; // // Input parameter for FT_CHECK_IO. // typedef struct _FT_CHECK_IO_INPUT { FT_LOGICAL_DISK_ID LogicalDiskId; } FT_CHECK_IO_INPUT, *PFT_CHECK_IO_INPUT; // // Output parameter for FT_CHECK_IO. // typedef struct _FT_CHECK_IO_OUTPUT { BOOLEAN IsIoOk; } FT_CHECK_IO_OUTPUT, *PFT_CHECK_IO_OUTPUT; // // Input parameter for FT_SET_DRIVE_LETTER_FOR_LOGICAL_DISK. // typedef struct _FT_SET_DRIVE_LETTER_FOR_LOGICAL_DISK_INPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; UCHAR DriveLetter; } FT_SET_DRIVE_LETTER_FOR_LOGICAL_DISK_INPUT, *PFT_SET_DRIVE_LETTER_FOR_LOGICAL_DISK_INPUT; // // Input parameter for FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION. // typedef struct _FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION_INPUT { ULONG Signature; ULONG Reserved; LONGLONG Offset; } FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION_INPUT, *PFT_QUERY_NT_DEVICE_NAME_FOR_PARTITION_INPUT; // // Output parameter for FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION. // typedef struct _FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION_OUTPUT { USHORT NumberOfCharactersInNtDeviceName; WCHAR NtDeviceName[1]; } FT_QUERY_NT_DEVICE_NAME_FOR_PARTITION_OUTPUT, *PFT_QUERY_NT_DEVICE_NAME_FOR_PARTITION_OUTPUT; // // Input parameter for FT_STOP_SYNC_OPERATIONS. // typedef struct _FT_STOP_SYNC_OPERATIONS_INPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; } FT_STOP_SYNC_OPERATIONS_INPUT, *PFT_STOP_SYNC_OPERATIONS_INPUT; // // Output parameter for FT_QUERY_LOGICAL_DISK_ID. // typedef struct _FT_QUERY_LOGICAL_DISK_ID_OUTPUT { FT_LOGICAL_DISK_ID RootLogicalDiskId; } FT_QUERY_LOGICAL_DISK_ID_OUTPUT, *PFT_QUERY_LOGICAL_DISK_ID_OUTPUT; // // Output parameter for FT_CREATE_PARTITION_LOGICAL_DISK. // typedef struct _FT_CREATE_PARTITION_LOGICAL_DISK_OUTPUT { FT_LOGICAL_DISK_ID NewLogicalDiskId; } FT_CREATE_PARTITION_LOGICAL_DISK_OUTPUT, *PFT_CREATE_PARTITION_LOGICAL_DISK_OUTPUT; #ifdef __cplusplus } #endif #endif // _NTDDFT2_