/*++

Copyright (c) Microsoft Corporation.  All rights reserved.

Module Name:

    clusapi.h

Abstract:

    This module defines the common management and application interface to
    the Windows Clusters services.

Authors:

    Rod Gamache     13-Feb-1996

Revision History:

--*/

#ifndef _CLUSTER_DISK_
#define _CLUSTER_DISK_


//
// Disk States.
//

typedef enum _DiskState {
    DiskOffline,
    DiskOnline,
    DiskFailed,
    DiskStalled,
    DiskOfflinePending,
    DiskStateMaximum = DiskOfflinePending
} DiskState;


//
// Define IOCTLs specific to ClusDisk Filter Driver.
//

#define IOCTL_DISK_CLUSTER_SET_STATE        CTL_CODE(IOCTL_SCSI_BASE, 0x500, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_RESET_BUS        CTL_CODE(IOCTL_SCSI_BASE, 0x501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_READ_CAPACITY    CTL_CODE(IOCTL_SCSI_BASE, 0x502, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DISK_CLUSTER_RESERVE          CTL_CODE(IOCTL_SCSI_BASE, 0x503, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_RELEASE          CTL_CODE(IOCTL_SCSI_BASE, 0x504, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_ATTACH           CTL_CODE(IOCTL_SCSI_BASE, 0x505, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_DETACH           CTL_CODE(IOCTL_SCSI_BASE, 0x506, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_SCSI_BASE, 0x507, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DISK_CLUSTER_START_RESERVE    CTL_CODE(IOCTL_SCSI_BASE, 0x508, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_STOP_RESERVE     CTL_CODE(IOCTL_SCSI_BASE, 0x509, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_ALIVE_CHECK      CTL_CODE(IOCTL_SCSI_BASE, 0x510, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DISK_CLUSTER_ROOT             CTL_CODE(IOCTL_SCSI_BASE, 0x511, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DISK_CLUSTER_ACTIVE           CTL_CODE(IOCTL_SCSI_BASE, 0x512, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_TEST             CTL_CODE(IOCTL_SCSI_BASE, 0x513, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_NOT_CLUSTER_CAPABLE CTL_CODE(IOCTL_SCSI_BASE, 0x514, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_GET_DRIVE_LETTER CTL_CODE(IOCTL_SCSI_BASE, 0x515, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_ARBITRATION_ESCAPE  CTL_CODE(IOCTL_SCSI_BASE, 0x516, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_NT4_CAPABLE       CTL_CODE(IOCTL_SCSI_BASE, 0x517, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_CHANGE_NOTIFY     CTL_CODE(IOCTL_SCSI_BASE, 0x518, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_HOLD_IO           CTL_CODE(IOCTL_SCSI_BASE, 0x519, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_RESUME_IO         CTL_CODE(IOCTL_SCSI_BASE, 0x520, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_WAIT_FOR_CLEANUP  CTL_CODE(IOCTL_SCSI_BASE, 0x521, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_VOLUME_TEST       CTL_CODE(IOCTL_SCSI_BASE, 0x522, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_DISK_CLUSTER_ATTACH_LIST      CTL_CODE(IOCTL_SCSI_BASE, 0x523, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_DISK_CLUSTER_DETACH_LIST      CTL_CODE(IOCTL_SCSI_BASE, 0x524, METHOD_BUFFERED, FILE_WRITE_ACCESS)

typedef struct _CLUSDISK_GET_DRIVE_LETTER {
    ULONG Signature;
    ULONG PartitionNumber;
} CLUSDISK_GET_DRIVE_LETTER, *PCLUSDISK_GET_DRIVE_LETTER;

#endif // _CLUSTER_DISK_
