6 Appendix A: Full IDL
-
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; };