import "ms-dtyp.idl";
// typedefs
typedef GUID * REFIID;
typedef GUID * LPGUID;
typedef GUID * LPNTMS_GUID;
typedef GUID NTMS_GUID;
typedef byte * PSECURITY_DESCRIPTOR_NTMS;
typedef ULONG_PTR NTMS_HANDLE;
// enumerations
enum NtmsObjectsTypes {
NTMS_UNKNOWN = 0,
NTMS_OBJECT = 1,
NTMS_CHANGER = 2,
NTMS_CHANGER_TYPE = 3,
NTMS_COMPUTER = 4,
NTMS_DRIVE = 5,
NTMS_DRIVE_TYPE = 6,
NTMS_IEDOOR = 7,
NTMS_IEPORT = 8,
NTMS_LIBRARY = 9,
NTMS_LIBREQUEST = 10,
NTMS_LOGICAL_MEDIA = 11,
NTMS_MEDIA_POOL = 12,
NTMS_MEDIA_TYPE = 13,
NTMS_PARTITION = 14,
NTMS_PHYSICAL_MEDIA = 15,
NTMS_STORAGESLOT = 16,
NTMS_OPREQUEST = 17,
NTMS_UI_DESTINATION = 18
};
enum NtmsOpreqCommand {
NTMS_OPREQ_UNKNOWN = 0,
NTMS_OPREQ_NEWMEDIA = 1,
NTMS_OPREQ_CLEANER = 2,
NTMS_OPREQ_DEVICESERVICE = 3,
NTMS_OPREQ_MOVEMEDIA = 4,
NTMS_OPREQ_MESSAGE = 5
};
enum NtmsNotificationOperations {
NTMS_OBJ_UPDATE = 1,
NTMS_OBJ_INSERT = 2,
NTMS_OBJ_DELETE = 3,
NTMS_EVENT_SIGNAL = 4,
NTMS_EVENT_COMPLETE = 5
};
enum NtmsDismountOptions {
NTMS_DISMOUNT_DEFERRED = 0x0001,
NTMS_DISMOUNT_IMMEDIATE = 0x0002
};
enum NtmsLmState {
NTMS_LM_QUEUED = 0,
NTMS_LM_INPROCESS = 1,
NTMS_LM_PASSED = 2,
NTMS_LM_FAILED = 3,
NTMS_LM_INVALID = 4,
NTMS_LM_WAITING = 5,
NTMS_LM_CANCELLED = 7,
NTMS_LM_STOPPED = 8
};
enum NtmsEjectOperation {
NTMS_EJECT_START = 0,
NTMS_EJECT_STOP = 1,
NTMS_EJECT_QUEUE = 2,
NTMS_EJECT_FORCE = 3,
NTMS_EJECT_IMMEDIATE = 4,
NTMS_EJECT_ASK_USER = 5
};
enum NtmsInjectOperation {
NTMS_INJECT_START = 0,
NTMS_INJECT_STOP = 1,
NTMS_INJECT_RETRACT = 2,
NTMS_INJECT_STARTMANY = 3
};
enum NtmsInventoryMethod {
NTMS_INVENTORY_NONE = 0,
NTMS_INVENTORY_FAST = 1,
NTMS_INVENTORY_OMID = 2,
NTMS_INVENTORY_DEFAULT = 3,
NTMS_INVENTORY_SLOT = 4,
NTMS_INVENTORY_STOP = 5,
NTMS_INVENTORY_MAX = 6
};
enum NtmsAllocateOptions {
NTMS_ALLOCATE_NEW = 0x0001,
NTMS_ALLOCATE_NEXT = 0x0002,
NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE = 0x0004
};
enum NtmsCreateOptions {
NTMS_OPEN_EXISTING = 0x0001,
NTMS_CREATE_NEW = 0x0002,
NTMS_OPEN_ALWAYS = 0x0003
};
enum NtmsMountOptions {
NTMS_MOUNT_READ = 0x0001,
NTMS_MOUNT_WRITE = 0x0002,
NTMS_MOUNT_ERROR_NOT_AVAILABLE = 0x0004,
NTMS_MOUNT_ERROR_OFFLINE = 0x0008,
NTMS_MOUNT_SPECIFIC_DRIVE = 0x0010,
NTMS_MOUNT_NOWAIT = 0x0020
};
enum NtmsMountPriority {
NTMS_PRIORITY_DEFAULT = 0,
NTMS_PRIORITY_HIGHEST = 15,
NTMS_PRIORITY_HIGH = 7,
NTMS_PRIORITY_NORMAL = 0,
NTMS_PRIORITY_LOW = -7,
NTMS_PRIORITY_LOWEST = -15
};
enum NtmsBarCodeState {
NTMS_BARCODESTATE_OK = 1,
NTMS_BARCODESTATE_UNREADABLE = 2
};
enum NtmsDriveState {
NTMS_DRIVESTATE_DISMOUNTED = 0,
NTMS_DRIVESTATE_MOUNTED = 1,
NTMS_DRIVESTATE_LOADED = 2,
NTMS_DRIVESTATE_UNLOADED = 5,
NTMS_DRIVESTATE_BEING_CLEANED = 6,
NTMS_DRIVESTATE_DISMOUNTABLE = 7
};
enum NtmsLmOperation {
NTMS_LM_REMOVE = 0,
NTMS_LM_DISABLECHANGER = 1,
NTMS_LM_DISABLELIBRARY = 1,
NTMS_LM_ENABLECHANGER = 2,
NTMS_LM_ENABLELIBRARY = 2,
NTMS_LM_DISABLEDRIVE = 3,
NTMS_LM_ENABLEDRIVE = 4,
NTMS_LM_DISABLEMEDIA = 5,
NTMS_LM_ENABLEMEDIA = 6,
NTMS_LM_UPDATEOMID = 7,
NTMS_LM_INVENTORY = 8,
NTMS_LM_DOORACCESS = 9,
NTMS_LM_EJECT = 10,
NTMS_LM_EJECTCLEANER = 11,
NTMS_LM_INJECT = 12,
NTMS_LM_INJECTCLEANER = 13,
NTMS_LM_PROCESSOMID = 14,
NTMS_LM_CLEANDRIVE = 15,
NTMS_LM_DISMOUNT = 16,
NTMS_LM_MOUNT = 17,
NTMS_LM_WRITESCRATCH = 18,
NTMS_LM_CLASSIFY = 19,
NTMS_LM_RESERVECLEANER = 20,
NTMS_LM_RELEASECLEANER = 21,
};
enum NtmsMediaState {
NTMS_MEDIASTATE_IDLE = 0,
NTMS_MEDIASTATE_INUSE = 1,
NTMS_MEDIASTATE_MOUNTED = 2,
NTMS_MEDIASTATE_LOADED = 3,
NTMS_MEDIASTATE_UNLOADED = 4,
NTMS_MEDIASTATE_OPERROR = 5,
NTMS_MEDIASTATE_OPREQ = 6
};
enum NtmsOperationalState {
NTMS_READY = 0,
NTMS_INITIALIZING = 10,
NTMS_NEEDS_SERVICE = 20,
NTMS_NOT_PRESENT = 21
};
enum NtmsOpreqState {
NTMS_OPSTATE_UNKNOWN = 0,
NTMS_OPSTATE_SUBMITTED = 1,
NTMS_OPSTATE_ACTIVE = 2,
NTMS_OPSTATE_INPROGRESS = 3,
NTMS_OPSTATE_REFUSED = 4,
NTMS_OPSTATE_COMPLETE = 5
};
enum NtmsPartitionState {
NTMS_PARTSTATE_UNKNOWN = 0,
NTMS_PARTSTATE_UNPREPARED = 1,
NTMS_PARTSTATE_INCOMPATIBLE = 2,
NTMS_PARTSTATE_DECOMMISSIONED = 3,
NTMS_PARTSTATE_AVAILABLE = 4,
NTMS_PARTSTATE_ALLOCATED = 5,
NTMS_PARTSTATE_COMPLETE = 6,
NTMS_PARTSTATE_FOREIGN = 7,
NTMS_PARTSTATE_IMPORT = 8,
NTMS_PARTSTATE_RESERVED = 9
};
enum NtmsUIOperations {
NTMS_UIDEST_ADD = 1,
NTMS_UIDEST_DELETE = 2,
NTMS_UIDEST_DELETEALL = 3
};
enum NtmsUITypes {
NTMS_UITYPE_INVALID = 0,
NTMS_UITYPE_INFO = 1,
NTMS_UITYPE_REQ = 2,
NTMS_UITYPE_ERR = 3,
NTMS_UITYPE_MAX = 4
};
enum NtmsAccessMask {
NTMS_USE_ACCESS = 1,
NTMS_MODIFY_ACCESS = 2,
NTMS_CONTROL_ACCESS = 3
};
// Generic Mappings :
#define NTMS_GENERIC_READ NTMS_USE_ACCESS
#define NTMS_GENERIC_WRITE (NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS)
#define NTMS_GENERIC_EXECUTE (NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS)
#define NTMS_GENERIC_ALL (NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS)
// Structures
typedef struct _NTMS_LIBRARYINFORMATION {
DWORD LibraryType;
NTMS_GUID CleanerSlot;
NTMS_GUID CleanerSlotDefault;
BOOL LibrarySupportsDriveCleaning;
BOOL BarCodeReaderInstalled;
DWORD InventoryMethod;
DWORD dwCleanerUsesRemaining;
DWORD FirstDriveNumber;
DWORD dwNumberOfDrives;
DWORD FirstSlotNumber;
DWORD dwNumberOfSlots;
DWORD FirstDoorNumber;
DWORD dwNumberOfDoors;
DWORD FirstPortNumber;
DWORD dwNumberOfPorts;
DWORD FirstChangerNumber;
DWORD dwNumberOfChangers;
DWORD dwNumberOfMedia;
DWORD dwNumberOfMediaTypes;
DWORD dwNumberOfLibRequests;
GUID Reserved;
BOOL AutoRecovery;
DWORD dwFlags;
} NTMS_LIBRARYINFORMATION;
typedef struct _SECURITY_ATTRIBUTES_NTMS {
DWORD nLength;
[size_is(nDescriptorLength)]
byte * lpSecurityDescriptor;
BOOL bInheritHandle;
DWORD nDescriptorLength;
} SECURITY_ATTRIBUTES_NTMS, *LPSECURITY_ATTRIBUTES_NTMS;
typedef struct _NTMS_ALLOCATION_INFORMATION {
DWORD dwSize;
byte * lpReserved;
NTMS_GUID AllocatedFrom;
} NTMS_ALLOCATION_INFORMATION, *LPNTMS_ALLOCATION_INFORMATION;
typedef struct _NTMS_ASYNC_IO {
NTMS_GUID OperationId; // reserved - do not use
NTMS_GUID EventId; // GUID which will be used by server to notify the client using OnNotify method
DWORD dwOperationType; // reserved - do not use
DWORD dwResult; // reserved - do not use
DWORD dwAsyncState; // reserved - do not use
#ifdef __midl
NTMS_HANDLE hEvent; // reserved - do not use
#else
PVOID hEvent; // reserved - do not use
#endif
BOOL bOnStateChange; // indicate to signal on every status change or not; false will signal only completion
} NTMS_ASYNC_IO, *LPNTMS_ASYNC_IO;
typedef struct _NTMS_MOUNT_INFORMATION {
DWORD dwSize;
#ifdef __midl
[ptr] LPNTMS_ASYNC_IO lpReserved;
#else
LPVOID lpReserved;
#endif
} NTMS_MOUNT_INFORMATION, *LPNTMS_MOUNT_INFORMATION;
typedef struct _NTMS_CHANGERINFORMATIONA {
DWORD Number;
NTMS_GUID ChangerType;
char szSerialNumber[32];
char szRevision[32];
char szDeviceName[64];
unsigned short ScsiPort;
unsigned short ScsiBus;
unsigned short ScsiTarget;
unsigned short ScsiLun;
NTMS_GUID Library;
} NTMS_CHANGERINFORMATIONA;
typedef struct _NTMS_CHANGERINFORMATIONW {
DWORD Number;
NTMS_GUID ChangerType;
[string] wchar_t szSerialNumber[32];
[string] wchar_t szRevision[32];
[string] wchar_t szDeviceName[64];
unsigned short ScsiPort;
unsigned short ScsiBus;
unsigned short ScsiTarget;
unsigned short ScsiLun;
NTMS_GUID Library;
} NTMS_CHANGERINFORMATIONW;
typedef struct _NTMS_CHANGERTYPEINFORMATIONA {
char szVendor[128];
char szProduct[128];
DWORD DeviceType;
} NTMS_CHANGERTYPEINFORMATIONA;
typedef struct _NTMS_CHANGERTYPEINFORMATIONW {
[string] wchar_t szVendor[128];
[string] wchar_t szProduct[128];
DWORD DeviceType;
} NTMS_CHANGERTYPEINFORMATIONW;
typedef struct _NTMS_DRIVEINFORMATIONA {
DWORD Number;
DWORD State;
NTMS_GUID DriveType;
char szDeviceName[64];
char szSerialNumber[32];
char szRevision[32];
unsigned short ScsiPort;
unsigned short ScsiBus;
unsigned short ScsiTarget;
unsigned short ScsiLun;
DWORD dwMountCount;
SYSTEMTIME LastCleanedTs;
NTMS_GUID SavedPartitionId;
NTMS_GUID Library;
GUID Reserved;
DWORD dwDeferDismountDelay;
} NTMS_DRIVEINFORMATIONA;
typedef struct _NTMS_DRIVEINFORMATIONW {
DWORD Number;
DWORD State;
NTMS_GUID DriveType;
[string] wchar_t szDeviceName[64];
[string] wchar_t szSerialNumber[32];
[string] wchar_t szRevision[32];
unsigned short ScsiPort;
unsigned short ScsiBus;
unsigned short ScsiTarget;
unsigned short ScsiLun;
DWORD dwMountCount;
SYSTEMTIME LastCleanedTs;
NTMS_GUID SavedPartitionId;
NTMS_GUID Library;
GUID Reserved;
DWORD dwDeferDismountDelay;
} NTMS_DRIVEINFORMATIONW;
typedef struct _NTMS_DRIVETYPEINFORMATIONA {
char szVendor[128];
char szProduct[128];
DWORD NumberOfHeads;
DWORD DeviceType;
} NTMS_DRIVETYPEINFORMATIONA;
typedef struct _NTMS_DRIVETYPEINFORMATIONW {
[string] wchar_t szVendor[128];
[string] wchar_t szProduct[128];
DWORD NumberOfHeads;
DWORD DeviceType;
} NTMS_DRIVETYPEINFORMATIONW;
typedef struct _NTMS_LIBREQUESTINFORMATIONA {
DWORD OperationCode;
DWORD OperationOption;
DWORD State;
NTMS_GUID PartitionId;
NTMS_GUID DriveId;
NTMS_GUID PhysMediaId;
NTMS_GUID Library;
NTMS_GUID SlotId;
SYSTEMTIME TimeQueued;
SYSTEMTIME TimeCompleted;
char szApplication[64];
char szUser[64];
char szComputer[64];
DWORD dwErrorCode;
NTMS_GUID WorkItemId;
DWORD dwPriority;
} NTMS_LIBREQUESTINFORMATIONA;
typedef struct _NTMS_LIBREQUESTINFORMATIONW {
DWORD OperationCode;
DWORD OperationOption;
DWORD State;
NTMS_GUID PartitionId;
NTMS_GUID DriveId;
NTMS_GUID PhysMediaId;
NTMS_GUID Library;
NTMS_GUID SlotId;
SYSTEMTIME TimeQueued;
SYSTEMTIME TimeCompleted;
[string] wchar_t szApplication[64];
[string] wchar_t szUser[64];
[string] wchar_t szComputer[64];
DWORD dwErrorCode;
NTMS_GUID WorkItemId;
DWORD dwPriority;
} NTMS_LIBREQUESTINFORMATIONW;
typedef struct _NTMS_MEDIAPOOLINFORMATION {
DWORD PoolType;
NTMS_GUID MediaType;
NTMS_GUID Parent;
DWORD AllocationPolicy;
DWORD DeallocationPolicy;
DWORD dwMaxAllocates;
DWORD dwNumberOfPhysicalMedia;
DWORD dwNumberOfLogicalMedia;
DWORD dwNumberOfMediaPools;
} NTMS_MEDIAPOOLINFORMATION;
typedef struct _NTMS_MEDIATYPEINFORMATION {
DWORD MediaType;
DWORD NumberOfSides;
DWORD ReadWriteCharacteristics;
DWORD DeviceType;
} NTMS_MEDIATYPEINFORMATION;
typedef struct _NTMS_STORAGESLOTINFORMATION {
DWORD Number;
DWORD State;
NTMS_GUID Library;
} NTMS_STORAGESLOTINFORMATION;
typedef struct _NTMS_IEDOORINFORMATION {
DWORD Number;
DWORD State;
unsigned short MaxOpenSecs;
NTMS_GUID Library;
} NTMS_IEDOORINFORMATION;
typedef struct _NTMS_IEPORTINFORMATION {
DWORD Number;
DWORD Content;
DWORD Position;
unsigned short MaxExtendSecs;
NTMS_GUID Library;
} NTMS_IEPORTINFORMATION;
typedef struct _NTMS_LMIDINFORMATION {
NTMS_GUID MediaPool;
DWORD dwNumberOfPartitions;
} NTMS_LMIDINFORMATION;
typedef struct _NTMS_COMPUTERINFORMATION {
DWORD dwLibRequestPurgeTime;
DWORD dwOpRequestPurgeTime;
DWORD dwLibRequestFlags;
DWORD dwOpRequestFlags;
DWORD dwMediaPoolPolicy;
} NTMS_COMPUTERINFORMATION;
typedef struct _NTMS_OPREQUESTINFORMATIONA {
DWORD Request;
SYSTEMTIME Submitted;
DWORD State;
char szMessage[256];
DWORD Arg1Type;
NTMS_GUID Arg1;
DWORD Arg2Type;
NTMS_GUID Arg2;
char szApplication[64];
char szUser[64];
char szComputer[64];
} NTMS_OPREQUESTINFORMATIONA;
typedef struct _NTMS_OPREQUESTINFORMATIONW {
DWORD Request;
SYSTEMTIME Submitted;
DWORD State;
[string] wchar_t szMessage[256];
DWORD Arg1Type;
NTMS_GUID Arg1;
DWORD Arg2Type;
NTMS_GUID Arg2;
[string] wchar_t szApplication[64];
[string] wchar_t szUser[64];
[string] wchar_t szComputer[64];
} NTMS_OPREQUESTINFORMATIONW;
typedef struct _NTMS_PARTITIONINFORMATIONA {
NTMS_GUID PhysicalMedia;
NTMS_GUID LogicalMedia;
DWORD State;
unsigned short Side;
DWORD dwOmidLabelIdLength;
byte OmidLabelId[255];
char szOmidLabelType[64];
char szOmidLabelInfo[256];
DWORD dwMountCount;
DWORD dwAllocateCount;
LARGE_INTEGER Capacity;
} NTMS_PARTITIONINFORMATIONA;
typedef struct _NTMS_PARTITIONINFORMATIONW {
NTMS_GUID PhysicalMedia;
NTMS_GUID LogicalMedia;
DWORD State;
unsigned short Side;
DWORD dwOmidLabelIdLength;
byte OmidLabelId[255];
[string] wchar_t szOmidLabelType[64];
[string] wchar_t szOmidLabelInfo[256];
DWORD dwMountCount;
DWORD dwAllocateCount;
LARGE_INTEGER Capacity;
} NTMS_PARTITIONINFORMATIONW;
typedef struct _NTMS_PMIDINFORMATIONA {
NTMS_GUID CurrentLibrary;
NTMS_GUID MediaPool;
NTMS_GUID Location;
DWORD LocationType;
NTMS_GUID MediaType;
NTMS_GUID HomeSlot;
char szBarCode[64];
DWORD BarCodeState;
char szSequenceNumber[32];
DWORD MediaState;
DWORD dwNumberOfPartitions;
DWORD dwMediaTypeCode;
DWORD dwDensityCode;
NTMS_GUID MountedPartition;
} NTMS_PMIDINFORMATIONA;
typedef struct _NTMS_PMIDINFORMATIONW {
NTMS_GUID CurrentLibrary;
NTMS_GUID MediaPool;
NTMS_GUID Location;
DWORD LocationType;
NTMS_GUID MediaType;
NTMS_GUID HomeSlot;
[string] wchar_t szBarCode[64];
DWORD BarCodeState;
[string] wchar_t szSequenceNumber[32];
DWORD MediaState;
DWORD dwNumberOfPartitions;
DWORD dwMediaTypeCode;
DWORD dwDensityCode;
NTMS_GUID MountedPartition;
} NTMS_PMIDINFORMATIONW;
typedef struct _RSM_MESSAGE {
[unique] LPGUID lpguidOperation;
DWORD dwNtmsType;
DWORD dwState;
DWORD dwFlags;
DWORD dwPriority;
DWORD dwErrorCode;
[string, unique] wchar_t * lpszComputerName;
[string] wchar_t * lpszApplication;
[string] wchar_t * lpszUser;
[string] wchar_t * lpszTimeSubmitted;
[string] wchar_t * lpszMessage;
} RSM_MESSAGE, *LPRSM_MESSAGE;
typedef struct _NTMS_OBJECTINFORMATIONA {
DWORD dwSize;
DWORD dwType;
SYSTEMTIME Created;
SYSTEMTIME Modified;
NTMS_GUID ObjectGuid;
BOOL Enabled;
DWORD dwOperationalState;
char szName[64];
char szDescription[127];
[switch_is(dwType)] union {
[case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONA Drive;
[case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONA DriveType;
[case(NTMS_LIBRARY)] NTMS_LIBRARYINFORMATION Library;
[case(NTMS_CHANGER)] NTMS_CHANGERINFORMATIONA Changer;
[case(NTMS_CHANGER_TYPE)] NTMS_CHANGERTYPEINFORMATIONA ChangerType;
[case(NTMS_STORAGESLOT)] NTMS_STORAGESLOTINFORMATION StorageSlot;
[case(NTMS_IEDOOR)] NTMS_IEDOORINFORMATION IEDoor;
[case(NTMS_IEPORT)] NTMS_IEPORTINFORMATION IEPort;
[case(NTMS_PHYSICAL_MEDIA)] NTMS_PMIDINFORMATIONA PhysicalMedia;
[case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia;
[case(NTMS_PARTITION)] NTMS_PARTITIONINFORMATIONA Partition;
[case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool;
[case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType;
[case(NTMS_LIBREQUEST)] NTMS_LIBREQUESTINFORMATIONA LibRequest;
[case(NTMS_OPREQUEST)] NTMS_OPREQUESTINFORMATIONA OpRequest;
[case(NTMS_COMPUTER)] NTMS_COMPUTERINFORMATION Computer;
} Info;
} NTMS_OBJECTINFORMATIONA, *LPNTMS_OBJECTINFORMATIONA;
typedef struct _NTMS_OBJECTINFORMATIONW {
DWORD dwSize;
DWORD dwType;
SYSTEMTIME Created;
SYSTEMTIME Modified;
NTMS_GUID ObjectGuid;
BOOL Enabled;
DWORD dwOperationalState;
[string] wchar_t szName[64];
[string] wchar_t szDescription[127];
[switch_is(dwType)] union {
[case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONW Drive;
[case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONW DriveType;
[case(NTMS_LIBRARY)] NTMS_LIBRARYINFORMATION Library;
[case(NTMS_CHANGER)] NTMS_CHANGERINFORMATIONW Changer;
[case(NTMS_CHANGER_TYPE)] NTMS_CHANGERTYPEINFORMATIONW ChangerType;
[case(NTMS_STORAGESLOT)] NTMS_STORAGESLOTINFORMATION StorageSlot;
[case(NTMS_IEDOOR)] NTMS_IEDOORINFORMATION IEDoor;
[case(NTMS_IEPORT)] NTMS_IEPORTINFORMATION IEPort;
[case(NTMS_PHYSICAL_MEDIA)] NTMS_PMIDINFORMATIONW PhysicalMedia;
[case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia;
[case(NTMS_PARTITION)] NTMS_PARTITIONINFORMATIONW Partition;
[case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool;
[case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType;
[case(NTMS_LIBREQUEST)] NTMS_LIBREQUESTINFORMATIONW LibRequest;
[case(NTMS_OPREQUEST)] NTMS_OPREQUESTINFORMATIONW OpRequest;
[case(NTMS_COMPUTER)] NTMS_COMPUTERINFORMATION Computer;
} Info;
} NTMS_OBJECTINFORMATIONW, *LPNTMS_OBJECTINFORMATIONW;
// interfaces
[
object,
uuid(4e934f30-341a-11d1-8fb1-00a024cb6019),
helpstring("INtms Library Control Interface"),
pointer_default(unique)
]
interface INtmsLibraryControl1 : IUnknown
{
HRESULT EjectNtmsMedia(
[in, unique] LPNTMS_GUID lpMediaId,
[in, out] LPNTMS_GUID lpEjectOperation,
[in] DWORD dwAction
);
HRESULT InjectNtmsMedia(
[in] LPNTMS_GUID lpLibraryId,
[in, out] LPNTMS_GUID lpInjectOperation,
[in] DWORD dwAction
);
HRESULT AccessNtmsLibraryDoor(
[in] LPNTMS_GUID lpLibraryId,
[in] DWORD dwAction
);
HRESULT CleanNtmsDrive(
[in] LPNTMS_GUID lpDriveId
);
HRESULT DismountNtmsDrive(
[in] LPNTMS_GUID lpDriveId
);
HRESULT InventoryNtmsLibrary(
[in] LPNTMS_GUID lpLibraryId,
[in] DWORD dwAction
);
HRESULT INtmsLibraryControl1_LocalOnlyOpnum09(
);
HRESULT CancelNtmsLibraryRequest(
[in] LPNTMS_GUID lpRequestId
);
HRESULT ReserveNtmsCleanerSlot (
[in] LPNTMS_GUID lpLibrary,
[in] LPNTMS_GUID lpSlot
);
HRESULT ReleaseNtmsCleanerSlot (
[in] LPNTMS_GUID lpLibrary
);
HRESULT InjectNtmsCleaner (
[in] LPNTMS_GUID lpLibrary,
[in,out] LPNTMS_GUID lpInjectOperation,
[in] DWORD dwNumberOfCleansLeft,
[in] DWORD dwAction
);
HRESULT EjectNtmsCleaner (
[in] LPNTMS_GUID lpLibrary,
[in,out] LPNTMS_GUID lpEjectOperation,
[in] DWORD dwAction
);
HRESULT DeleteNtmsLibrary(
[in] LPNTMS_GUID lpLibraryId
);
HRESULT DeleteNtmsDrive(
[in] LPNTMS_GUID lpDriveId
);
HRESULT GetNtmsRequestOrder(
[in] LPNTMS_GUID lpRequestId,
[out] DWORD * lpdwOrderNumber
);
HRESULT SetNtmsRequestOrder(
[in] LPNTMS_GUID lpRequestId,
[in] DWORD dwOrderNumber
);
HRESULT DeleteNtmsRequests(
[in,
size_is(dwCount)]
LPNTMS_GUID lpRequestId,
[in] DWORD dwType,
[in] DWORD dwCount
);
HRESULT BeginNtmsDeviceChangeDetection(
[out] NTMS_HANDLE * lpDetectHandle
);
HRESULT SetNtmsDeviceChangeDetection(
[in] NTMS_HANDLE DetectHandle,
[in,
size_is(dwCount)]
LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] DWORD dwCount
);
HRESULT EndNtmsDeviceChangeDetection(
[in] NTMS_HANDLE DetectHandle
);
};
[
object,
uuid(d02e4be0-3419-11d1-8fb1-00a024cb6019),
helpstring("INtms Media Services Interface"),
pointer_default(unique)
]
interface INtmsMediaServices1 : IUnknown
{
HRESULT MountNtmsMedia(
[in,
size_is(dwCount)]
LPNTMS_GUID lpMediaId,
[in, out,
size_is(dwCount)]
LPNTMS_GUID lpDriveId,
[in] DWORD dwCount,
[in] DWORD dwOptions,
[in] int dwPriority,
[in] DWORD dwTimeout,
[in,out]
LPNTMS_MOUNT_INFORMATION lpMountInformation
);
HRESULT DismountNtmsMedia(
[in,
size_is(dwCount)]
LPNTMS_GUID lpMediaId,
[in] DWORD dwCount,
[in] DWORD dwOptions
);
HRESULT Opnum5NotUsedOnWire();
HRESULT AllocateNtmsMedia(
[in] LPNTMS_GUID lpMediaPool,
[in, unique] LPNTMS_GUID lpPartition,
[in, out] LPNTMS_GUID lpMediaId,
[in] DWORD dwOptions,
[in] DWORD dwTimeout,
[in, out] LPNTMS_ALLOCATION_INFORMATION
lpAllocateInformation
);
HRESULT DeallocateNtmsMedia(
[in] LPNTMS_GUID lpMediaId,
[in] DWORD dwOptions
);
HRESULT SwapNtmsMedia(
[in] LPNTMS_GUID lpMediaId1,
[in] LPNTMS_GUID lpMediaId2
);
HRESULT DecommissionNtmsMedia(
[in] LPNTMS_GUID lpMediaId
);
HRESULT SetNtmsMediaComplete(
[in] LPNTMS_GUID lpMediaId
);
HRESULT DeleteNtmsMedia(
[in] LPNTMS_GUID lpMediaId
);
HRESULT CreateNtmsMediaPoolA(
[in, string] const char * lpPoolName,
[in, unique] LPNTMS_GUID lpMediaType,
[in] DWORD dwOptions,
[in, unique]
LPSECURITY_ATTRIBUTES_NTMS lpSecurityAttributes,
[out] LPNTMS_GUID lpPoolId
);
HRESULT CreateNtmsMediaPoolW(
[in, string] const wchar_t * lpPoolName,
[in, unique] LPNTMS_GUID lpMediaType,
[in] DWORD dwOptions,
[in, unique]
LPSECURITY_ATTRIBUTES_NTMS lpSecurityAttributes,
[out] LPNTMS_GUID lpPoolId
);
HRESULT GetNtmsMediaPoolNameA(
[in] LPNTMS_GUID lpPoolId,
[out, size_is(*lpdwNameSizeBuf),
length_is(*lpdwNameSizeBuf)]
unsigned char * lpBufName,
[in] DWORD * lpdwNameSizeBuf,
[out] DWORD * lpdwNameSize
);
HRESULT GetNtmsMediaPoolNameW(
[in] LPNTMS_GUID lpPoolId,
[out,
size_is(*lpdwNameSizeBuf),
length_is(*lpdwNameSizeBuf)]
wchar_t * lpBufName,
[in] DWORD * lpdwNameSizeBuf,
[out] DWORD * lpdwNameSize
);
HRESULT MoveToNtmsMediaPool(
[in] LPNTMS_GUID lpMediaId,
[in] LPNTMS_GUID lpPoolId
);
HRESULT DeleteNtmsMediaPool(
[in] LPNTMS_GUID lpPoolId
);
HRESULT AddNtmsMediaType(
[in] LPNTMS_GUID lpMediaTypeId,
[in] LPNTMS_GUID lpLibId
);
HRESULT DeleteNtmsMediaType(
[in] LPNTMS_GUID lpMediaTypeId,
[in] LPNTMS_GUID lpLibId
);
HRESULT ChangeNtmsMediaType(
[in] LPNTMS_GUID lpMediaId,
[in] LPNTMS_GUID lpPoolId
);
};
[
object,
uuid(69ab7050-3059-11d1-8faf-00a024cb6019),
helpstring("INtmsObjectInfo1 Interface"),
pointer_default(unique)
]
interface INtmsObjectInfo1 : IUnknown
{
HRESULT GetNtmsServerObjectInformationA(
[in, unique] LPNTMS_GUID lpObjectId,
[out] LPNTMS_OBJECTINFORMATIONA lpInfo,
[in] DWORD dwType,
[in] DWORD dwSize
);
HRESULT GetNtmsServerObjectInformationW(
[in] LPNTMS_GUID lpObjectId,
[out] LPNTMS_OBJECTINFORMATIONW lpInfo,
[in] DWORD dwType,
[in] DWORD dwSize
);
HRESULT SetNtmsObjectInformationA(
[in] LPNTMS_GUID lpObjectId,
[in] LPNTMS_OBJECTINFORMATIONA lpInfo
);
HRESULT SetNtmsObjectInformationW(
[in] LPNTMS_GUID lpObjectId,
[in] LPNTMS_OBJECTINFORMATIONW lpInfo
);
HRESULT CreateNtmsMediaA(
[in, out] LPNTMS_OBJECTINFORMATIONA lpMedia,
[in, out,
size_is(*lpdwListBufferSize),
length_is(dwListCount)]
LPNTMS_OBJECTINFORMATIONA lpList,
[in] DWORD * lpdwListBufferSize,
[in] DWORD dwListCount,
[in] DWORD dwOptions
);
HRESULT CreateNtmsMediaW(
[in, out] LPNTMS_OBJECTINFORMATIONW lpMedia,
[in, out,
size_is(*lpdwListBufferSize),
length_is(dwListCount)]
LPNTMS_OBJECTINFORMATIONW lpList,
[in] DWORD * lpdwListBufferSize,
[in] DWORD dwListCount,
[in] DWORD dwOptions
);
};
[
object,
uuid(b057dc50-3059-11d1-8faf-00a024cb6019),
helpstring("INtms Object Management Interface"),
pointer_default(unique)
]
interface INtmsObjectManagement1 : IUnknown
{
HRESULT GetNtmsObjectSecurity(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] DWORD SecurityInformation,
[out,
size_is(nLength)]
PSECURITY_DESCRIPTOR_NTMS lpSecurityDescriptor,
[in] DWORD nLength,
[out] DWORD * lpnLengthNeeded
);
HRESULT SetNtmsObjectSecurity(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] DWORD SecurityInformation,
[in,
size_is(nLength)]
PSECURITY_DESCRIPTOR_NTMS lpSecurityDescriptor,
[in] DWORD nLength
);
HRESULT GetNtmsObjectAttributeA(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] const char * lpAttributeName,
[out,
size_is(*lpdwAttributeBufferSize),
length_is(*lpAttributeSize)]
byte * lpAttributeData,
[in] DWORD * lpdwAttributeBufferSize,
[out] DWORD * lpAttributeSize
);
HRESULT GetNtmsObjectAttributeW(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in,string] const wchar_t * lpAttributeName,
[out,
size_is(*lpdwAttributeBufferSize),
length_is(*lpAttributeSize)]
byte * lpAttributeData,
[in] DWORD * lpdwAttributeBufferSize,
[out] DWORD * lpAttributeSize
);
HRESULT SetNtmsObjectAttributeA(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] const char * lpAttributeName,
[in, size_is(AttributeSize)] byte * lpAttributeData,
[in] DWORD AttributeSize
);
HRESULT SetNtmsObjectAttributeW(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in, string] const wchar_t * lpAttributeName,
[in, size_is(AttributeSize)] byte * lpAttributeData,
[in] DWORD AttributeSize
);
HRESULT EnumerateNtmsObject(
[in, unique] const LPNTMS_GUID lpContainerId,
[out,
size_is(*lpdwListBufferSize),
length_is(*lpdwListBufferSize)]
LPNTMS_GUID lpList,
[in] DWORD * lpdwListBufferSize,
[out] DWORD * lpdwListSize,
[in] DWORD dwType,
[in] DWORD dwOptions
);
HRESULT DisableNtmsObject(
[in] DWORD dwType,
[in] LPNTMS_GUID lpObjectId
);
HRESULT EnableNtmsObject(
[in] DWORD dwType,
[in] LPNTMS_GUID lpObjectId
);
};
[
object,
uuid(8da03f40-3419-11d1-8fb1-00a024cb6019),
helpstring("INtms Session Interface"),
pointer_default(unique)
]
interface INtmsSession1 : IUnknown
{
HRESULT OpenNtmsServerSessionW(
[in, string, unique] const wchar_t * lpServer,
[in, string, unique] const wchar_t * lpApplication,
[in, string] const wchar_t * lpClientName,
[in, string] const wchar_t * lpUserName,
[in] DWORD dwOptions
);
HRESULT OpenNtmsServerSessionA(
[in, unique] const char * lpServer,
[in, unique] const char * lpApplication,
[in] const char * lpClientName,
[in] const char * lpUserName,
[in] DWORD dwOptions
);
HRESULT CloseNtmsSession(
);
HRESULT SubmitNtmsOperatorRequestW(
[in] DWORD dwRequest,
[in, string, unique] const wchar_t * lpMessage,
[in, unique] LPNTMS_GUID lpArg1Id,
[in, unique] LPNTMS_GUID lpArg2Id,
[out] LPNTMS_GUID lpRequestId
);
HRESULT SubmitNtmsOperatorRequestA(
[in] DWORD dwRequest,
[in, unique] const char * lpMessage,
[in, unique] LPNTMS_GUID lpArg1Id,
[in, unique] LPNTMS_GUID lpArg2Id,
[out] LPNTMS_GUID lpRequestId
);
HRESULT WaitForNtmsOperatorRequest(
[in] LPNTMS_GUID lpRequestId,
[in] DWORD dwTimeout
);
HRESULT CancelNtmsOperatorRequest(
[in] LPNTMS_GUID lpRequestId
);
HRESULT SatisfyNtmsOperatorRequest(
[in] LPNTMS_GUID lpRequestId
);
HRESULT ImportNtmsDatabase(
);
HRESULT ExportNtmsDatabase(
);
HRESULT Opnum13NotUsedOnWire();
HRESULT AddNotification(
[in] DWORD dwType
);
HRESULT RemoveNotification(
[in] DWORD dwType
);
HRESULT DispatchNotification(
[in] DWORD dwType,
[in] DWORD dwOperation,
[in] LPNTMS_GUID lpIdentifier
);
};
[
object,
uuid(879C8BBE-41B0-11d1-BE11-00C04FB6BF70),
helpstring("IClientSink Interface"),
pointer_default(unique)
]
interface IClientSink : IUnknown
{
HRESULT OnNotify(
[in] DWORD dwType,
[in] DWORD dwOperation,
[in] LPNTMS_GUID lpIdentifier
);
};
[
object,
uuid(DB90832F-6910-4d46-9F5E-9FD6BFA73903),
helpstring("New INtms Library Control Interface "),
pointer_default(unique)
]
interface INtmsLibraryControl2 : INtmsLibraryControl1
{
HRESULT IdentifyNtmsSlot(
[in] LPNTMS_GUID lpSlotId,
[in] DWORD dwOption
);
};
[
object,
uuid(895A2C86-270D-489d-A6C0-DC2A9B35280E),
helpstring("Robust INtms Object Management Interface"),
pointer_default(unique)
]
interface INtmsObjectManagement2 : INtmsObjectManagement1
{
HRESULT EnumerateNtmsObjectR(
[in, unique] const LPNTMS_GUID lpContainerId,
[out,
size_is(*lpdwListBufferSize),
length_is(*lpdwListSize)]
LPNTMS_GUID lpList,
[in] DWORD * lpdwListBufferSize,
[out] DWORD * lpdwListSize,
[out] DWORD * lpdwOutputSize,
[in] DWORD dwType,
[in] DWORD dwOptions
);
HRESULT GetNtmsUIOptionsA(
[in, unique] const LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[out,
size_is(*lpdwBufSize),
length_is(*lpdwDataSize)]
unsigned char * lpszDestination,
[in] DWORD * lpdwBufSize,
[out] DWORD * lpdwDataSize,
[out] DWORD * lpdwOutSize
);
HRESULT GetNtmsUIOptionsW(
[in, unique] const LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[out,
size_is(*lpdwBufSize),
length_is(*lpdwDataSize)]
wchar_t * lpszDestination,
[in] DWORD * lpdwBufSize,
[out] DWORD * lpdwDataSize,
[out] DWORD * lpdwOutSize
);
HRESULT SetNtmsUIOptionsA(
[in, unique] const LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] DWORD dwOperation,
[in, string] const char * lpszDestination
);
HRESULT SetNtmsUIOptionsW(
[in, unique] const LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] DWORD dwOperation,
[in, string] const wchar_t * lpszDestination
);
};
[
object,
uuid(3BBED8D9-2C9A-4b21-8936-ACB2F995BE6C),
helpstring("INtms Object Management Interface 3"),
pointer_default(unique)
]
interface INtmsObjectManagement3 : INtmsObjectManagement2
{
HRESULT GetNtmsObjectAttributeAR(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in] const char * lpAttributeName,
[out,
size_is(*lpdwAttributeBufferSize),
length_is(*lpAttributeSize)]
byte * lpAttributeData,
[in] DWORD * lpdwAttributeBufferSize,
[out] DWORD * lpAttributeSize,
[out] DWORD * lpActualAttributeSize
);
HRESULT GetNtmsObjectAttributeWR(
[in] LPNTMS_GUID lpObjectId,
[in] DWORD dwType,
[in, string] const wchar_t * lpAttributeName,
[out,
size_is(*lpdwAttributeBufferSize),
length_is(*lpAttributeSize)]
byte * lpAttributeData,
[in] DWORD * lpdwAttributeBufferSize,
[out] DWORD * lpAttributeSize,
[out] DWORD * lpActualAttributeSize
);
}
[
object,
uuid(7D07F313-A53F-459a-BB12-012C15B1846E),
helpstring("Robust INtms Media Services Interface"),
pointer_default(unique)
]
interface IRobustNtmsMediaServices1 : INtmsMediaServices1
{
HRESULT GetNtmsMediaPoolNameAR(
[in] LPNTMS_GUID lpPoolId,
[out,
size_is(*lpdwNameSizeBuf),
length_is(*lpdwNameSize)]
unsigned char * lpBufName,
[in] DWORD * lpdwNameSizeBuf,
[out] DWORD * lpdwNameSize,
[out] DWORD * lpdwOutputSize
);
HRESULT GetNtmsMediaPoolNameWR(
[in] LPNTMS_GUID lpPoolId,
[out,
size_is(*lpdwNameSizeBuf),
length_is(*lpdwNameSize)]
wchar_t * lpBufName,
[in] DWORD * lpdwNameSizeBuf,
[out] DWORD * lpdwNameSize,
[out] DWORD * lpdwOutputSize
);
};
[
object,
uuid(00000000-0000-0000-C000-000000000046),
pointer_default(unique)
]
interface IUnknown
{
typedef [unique] IUnknown *LPUNKNOWN;
HRESULT QueryInterface(
[in] REFIID riid,
[out, iid_is(riid)] void **ppvObject);
DWORD AddRef();
DWORD Release();
}
[
object,
uuid(081E7188-C080-4FF3-9238-29F66D6CABFD),
helpstring("IMessenger Interface"),
pointer_default(unique)
]
interface IMessenger : IUnknown
{
[helpstring("method SendMessage")]
HRESULT SendMessage(
[in, unique] LPRSM_MESSAGE lpRsmMessage
);
[helpstring("method RecallMessage")]
HRESULT RecallMessage(
[in] LPGUID lpGuid
);
};
[
object,
uuid(BB39332C-BFEE-4380-AD8A-BADC8AFF5BB6),
helpstring("INtmsNotifySink Interface"),
pointer_default(unique)
]
interface INtmsNotifySink : IUnknown
{
[helpstring("method ConnectCallback")]
HRESULT ConnectCallback(
[in] IUnknown* pUnkCP,
[in] IUnknown* pUnkSink
);
[helpstring("method OnNotify")]
HRESULT OnNotify(
[in] DWORD dwType,
[in] DWORD dwOperation,
[in] LPGUID lpIdentifier
);
[helpstring("method ReleaseCallback")]
HRESULT ReleaseCallback(
);
};
[
uuid(D61A27C6-8F53-11D0-BFA0-00A024151983),
helpstring("Removable Storage Manager Class"),
]
coclass CNtmsSvr
{
[default] interface INtmsSession1;
};