/*++ Copyright (c) Microsoft Corporation. All rights reserved Module Name: ntmsapi.h Abstract: This module contains the RSM API prototypes and public definitions supported in the API The RSM API provides a "C" interface to RSM This file can be included in C and C++ code This file's name is historical. RSM began life as NTMS --*/ #ifndef _INCL_NTMSAPI_H_ #define _INCL_NTMSAPI_H_ #if _MSC_VER > 1000 #pragma once #endif #pragma pack(8) #ifdef __cplusplus extern "C" { #endif typedef GUID NTMS_GUID; typedef GUID* LPNTMS_GUID; #define NTMS_NULLGUID {0,0,0,{0,0,0,0,0,0,0,0}} #define NTMS_IS_NULLGUID(id) ((id.Data1==0)&&(id.Data2==0)&&(id.Data3==0)&&\ (id.Data4[0]==0)&&(id.Data4[1]==0)&&(id.Data4[2]==0)&&\ (id.Data4[3]==0)&&(id.Data4[4]==0)&&(id.Data4[5]==0)&&\ (id.Data4[6]==0)&&(id.Data4[7]==0)) // // Define unicode/ascii specific functions // This include functions that get strings // #ifdef UNICODE #define OpenNtmsSession OpenNtmsSessionW #define GetNtmsDeviceName GetNtmsDeviceNameW #define GetNtmsObjectInformation GetNtmsObjectInformationW #define SetNtmsObjectInformation SetNtmsObjectInformationW #define CreateNtmsMediaPool CreateNtmsMediaPoolW #define GetNtmsMediaPoolName GetNtmsMediaPoolNameW #define GetNtmsObjectAttribute GetNtmsObjectAttributeW #define SetNtmsObjectAttribute SetNtmsObjectAttributeW #define GetNtmsUIOptions GetNtmsUIOptionsW #define SetNtmsUIOptions SetNtmsUIOptionsW #define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestW #define CreateNtmsMedia CreateNtmsMediaW #define EjectDiskFromSADrive EjectDiskFromSADriveW #define GetVolumesFromDrive GetVolumesFromDriveW #else #define OpenNtmsSession OpenNtmsSessionA #define GetNtmsDeviceName GetNtmsDeviceNameA #define GetNtmsObjectInformation GetNtmsObjectInformationA #define SetNtmsObjectInformation SetNtmsObjectInformationA #define CreateNtmsMediaPool CreateNtmsMediaPoolA #define GetNtmsMediaPoolName GetNtmsMediaPoolNameA #define GetNtmsObjectAttribute GetNtmsObjectAttributeA #define SetNtmsObjectAttribute SetNtmsObjectAttributeA #define GetNtmsUIOptions GetNtmsUIOptionsA #define SetNtmsUIOptions SetNtmsUIOptionsA #define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestA #define CreateNtmsMedia CreateNtmsMediaA #define EjectDiskFromSADrive EjectDiskFromSADriveA #define GetVolumesFromDrive GetVolumesFromDriveA #endif #ifndef NTMS_NOREDEF // WARNING : The object types are provided as an ordered list of NTMS // database objects. Do NOT modify without also modifying the object // metadata table in dbobmeta.cpp enum NtmsObjectsTypes { NTMS_UNKNOWN = 0, NTMS_OBJECT, NTMS_CHANGER, NTMS_CHANGER_TYPE, NTMS_COMPUTER, NTMS_DRIVE, NTMS_DRIVE_TYPE, NTMS_IEDOOR, NTMS_IEPORT, NTMS_LIBRARY, NTMS_LIBREQUEST, NTMS_LOGICAL_MEDIA, NTMS_MEDIA_POOL, NTMS_MEDIA_TYPE, NTMS_PARTITION, NTMS_PHYSICAL_MEDIA, NTMS_STORAGESLOT, NTMS_OPREQUEST, NTMS_UI_DESTINATION, NTMS_NUMBER_OF_OBJECT_TYPES }; // async i/o defined for future implementation typedef struct _NTMS_ASYNC_IO { NTMS_GUID OperationId; // reserved - do not use NTMS_GUID EventId; // reserved - do not use DWORD dwOperationType; // reserved - do not use DWORD dwResult; // completion status DWORD dwAsyncState; // current state of request #ifdef MIDL_PASS NTMS_HANDLE hEvent; #else HANDLE hEvent; // event handle to signal on status change #endif // or request completion BOOL bOnStateChange; // indicate to signal on status change also } NTMS_ASYNC_IO, *LPNTMS_ASYNC_IO; enum NtmsAsyncStatus { NTMS_ASYNCSTATE_QUEUED = 0, // initial state is queued NTMS_ASYNCSTATE_WAIT_RESOURCE, NTMS_ASYNCSTATE_WAIT_OPERATOR, NTMS_ASYNCSTATE_INPROCESS, NTMS_ASYNCSTATE_COMPLETE // complete, check result code }; enum NtmsAsyncOperations { NTMS_ASYNCOP_MOUNT = 1 // mount operation }; #endif // NTMS_NOREDEF //======================================================================= // SESSION ESTABLISHMENT //======================================================================= #ifndef MIDL_PASS enum NtmsSessionOptions { NTMS_SESSION_QUERYEXPEDITE = 0x1 }; HANDLE WINAPI OpenNtmsSessionW( LPCWSTR lpServer, LPCWSTR lpApplication, DWORD dwOptions ); HANDLE WINAPI OpenNtmsSessionA( LPCSTR lpServer, LPCSTR lpApplication, DWORD dwOptions ); DWORD WINAPI CloseNtmsSession( HANDLE hSession ); #endif // MIDL_PASS #ifndef NTMS_NOREDEF //======================================================================= // MOUNT DEFINITIONS //======================================================================= enum NtmsMountOptions { NTMS_MOUNT_READ = 0x0001, NTMS_MOUNT_WRITE = 0x0002, NTMS_MOUNT_ERROR_NOT_AVAILABLE = 0x0004, NTMS_MOUNT_ERROR_IF_UNAVAILABLE = 0x0004, NTMS_MOUNT_ERROR_OFFLINE = 0x0008, NTMS_MOUNT_ERROR_IF_OFFLINE = 0x0008, NTMS_MOUNT_SPECIFIC_DRIVE = 0x0010, NTMS_MOUNT_NOWAIT = 0x0020 }; enum NtmsDismountOptions { NTMS_DISMOUNT_DEFERRED = 0x0001, NTMS_DISMOUNT_IMMEDIATE = 0x0002 }; 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 }; typedef struct _NTMS_MOUNT_INFORMATION { DWORD dwSize; // size of structure #ifdef MIDL_PASS [ptr] LPNTMS_ASYNC_IO lpReserved; #else LPVOID lpReserved; #endif } NTMS_MOUNT_INFORMATION, *LPNTMS_MOUNT_INFORMATION; #endif // NTMS_NOREDEF //======================================================================= // MOUNT AND DISMOUNT APIS //======================================================================= #ifndef MIDL_PASS DWORD WINAPI MountNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpDriveId, DWORD dwCount, DWORD dwOptions, int dwPriority, DWORD dwTimeout, LPNTMS_MOUNT_INFORMATION lpMountInformation ); DWORD WINAPI DismountNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, DWORD dwCount, DWORD dwOptions ); #endif // MIDL_PASS #ifndef NTMS_NOREDEF //======================================================================= // ALLOCATE DEFINITIONS //======================================================================= enum NtmsAllocateOptions { NTMS_ALLOCATE_NEW = 0x0001, NTMS_ALLOCATE_NEXT = 0x0002, NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE = 0x0004 }; typedef struct _NTMS_ALLOCATION_INFORMATION { DWORD dwSize; // size of structure #ifdef MIDL_PASS [ptr] LPNTMS_ASYNC_IO lpReserved; // future async io control #else LPVOID lpReserved; #endif NTMS_GUID AllocatedFrom; // original source of media (scratch pool, app pool, import etc). } NTMS_ALLOCATION_INFORMATION, *LPNTMS_ALLOCATION_INFORMATION; #endif //======================================================================= // ALLOCATE AND DEALLOCATE APIS //======================================================================= #ifndef MIDL_PASS DWORD WINAPI AllocateNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaPool, LPNTMS_GUID lpPartition, // optional LPNTMS_GUID lpMediaId, // OUTPUT, media id or operator request id DWORD dwOptions, DWORD dwTimeout, LPNTMS_ALLOCATION_INFORMATION lpAllocateInformation ); DWORD WINAPI DeallocateNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, DWORD dwOptions ); DWORD WINAPI SwapNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId1, LPNTMS_GUID lpMediaId2 ); DWORD WINAPI AddNtmsMediaType( HANDLE hSession, LPNTMS_GUID lpMediaTypeId, LPNTMS_GUID lpLibId ); DWORD WINAPI DeleteNtmsMediaType( HANDLE hSession, LPNTMS_GUID lpMediaTypeId, LPNTMS_GUID lpLibId ); DWORD WINAPI ChangeNtmsMediaType( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpPoolId ); //======================================================================= // MEDIA STATES //======================================================================= DWORD WINAPI DecommissionNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId ); DWORD WINAPI SetNtmsMediaComplete( HANDLE hSession, LPNTMS_GUID lpMediaId ); DWORD WINAPI DeleteNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId ); #endif // MIDL_PASS #ifndef NTMS_NOREDEF //======================================================================= // MEDIA POOLS //======================================================================= enum NtmsCreateOptions { NTMS_OPEN_EXISTING = 0x0001, NTMS_CREATE_NEW = 0x0002, NTMS_OPEN_ALWAYS = 0x0003 }; #endif // NTMS_NOREDEF #ifndef MIDL_PASS #ifdef PRE_SEVIL DWORD WINAPI CreateNtmsMediaPool( HANDLE hSession, LPCTSTR lpPoolName, LPNTMS_GUID lpMediaType, DWORD dwAction, LPSECURITY_ATTRIBUTES lpSecurityAttributes, LPNTMS_GUID lpPoolId // OUT ); #endif // SEVILIA DWORD WINAPI CreateNtmsMediaPoolA( HANDLE hSession, LPCSTR lpPoolName, LPNTMS_GUID lpMediaType, DWORD dwAction, LPSECURITY_ATTRIBUTES lpSecurityAttributes, LPNTMS_GUID lpPoolId // OUT ); DWORD WINAPI CreateNtmsMediaPoolW( HANDLE hSession, LPCWSTR lpPoolName, LPNTMS_GUID lpMediaType, DWORD dwAction, LPSECURITY_ATTRIBUTES lpSecurityAttributes, LPNTMS_GUID lpPoolId // OUT ); DWORD WINAPI GetNtmsMediaPoolNameA( HANDLE hSession, LPNTMS_GUID lpPoolId, LPSTR lpBufName, LPDWORD lpdwNameSize ); DWORD WINAPI GetNtmsMediaPoolNameW( HANDLE hSession, LPNTMS_GUID lpPoolId, LPWSTR lpBufName, LPDWORD lpdwNameSize ); DWORD WINAPI MoveToNtmsMediaPool( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpPoolId ); DWORD WINAPI DeleteNtmsMediaPool( HANDLE hSession, LPNTMS_GUID lpPoolId ); DWORD WINAPI DeleteNtmsLibrary( HANDLE hSession, LPNTMS_GUID lpLibraryId ); DWORD WINAPI DeleteNtmsDrive( HANDLE hSession, LPNTMS_GUID lpDriveId ); #endif // MIDL_PASS #define NTMS_OBJECTNAME_LENGTH 64 #define NTMS_DESCRIPTION_LENGTH 127 #define NTMS_DEVICENAME_LENGTH 64 #define NTMS_SERIALNUMBER_LENGTH 32 #define NTMS_REVISION_LENGTH 32 #define NTMS_BARCODE_LENGTH 64 #define NTMS_SEQUENCE_LENGTH 32 #define NTMS_VENDORNAME_LENGTH 128 #define NTMS_PRODUCTNAME_LENGTH 128 #define NTMS_USERNAME_LENGTH 64 #define NTMS_APPLICATIONNAME_LENGTH 64 #define NTMS_COMPUTERNAME_LENGTH 64 #define NTMS_I1_MESSAGE_LENGTH 127 #define NTMS_MESSAGE_LENGTH 256 #define NTMS_POOLHIERARCHY_LENGTH 512 #define NTMS_OMIDLABELID_LENGTH 255 #define NTMS_OMIDLABELTYPE_LENGTH 64 #define NTMS_OMIDLABELINFO_LENGTH 256 #ifndef NTMS_NOREDEF //====================================================================== // OBJECT INFORMATION STRUCTURES //====================================================================== 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 }; #ifdef UNICODE #define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONW #define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONW #else #define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONA #define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONA #endif typedef struct _NTMS_DRIVEINFORMATIONA { DWORD Number; DWORD State; NTMS_GUID DriveType; CHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; CHAR szRevision[NTMS_REVISION_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD 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; WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; WCHAR szRevision[NTMS_REVISION_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; DWORD dwMountCount; SYSTEMTIME LastCleanedTs; NTMS_GUID SavedPartitionId; NTMS_GUID Library; GUID Reserved; DWORD dwDeferDismountDelay; } NTMS_DRIVEINFORMATIONW; enum NtmsLibraryType { NTMS_LIBRARYTYPE_UNKNOWN = 0, NTMS_LIBRARYTYPE_OFFLINE = 1, NTMS_LIBRARYTYPE_ONLINE = 2, NTMS_LIBRARYTYPE_STANDALONE = 3 }; // library flags enum NtmsLibraryFlags { NTMS_LIBRARYFLAG_FIXEDOFFLINE = 0x01, NTMS_LIBRARYFLAG_CLEANERPRESENT = 0x02, NTMS_LIBRARYFLAG_AUTODETECTCHANGE = 0x04, NTMS_LIBRARYFLAG_IGNORECLEANERUSESREMAINING = 0x08, NTMS_LIBRARYFLAG_RECOGNIZECLEANERBARCODE = 0x10 }; 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 }; 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; #ifdef UNICODE #define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONW #define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONW #else #define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONA #define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONA #endif typedef struct _NTMS_CHANGERINFORMATIONA { DWORD Number; NTMS_GUID ChangerType; CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; CHAR szRevision[NTMS_REVISION_LENGTH]; CHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; NTMS_GUID Library; } NTMS_CHANGERINFORMATIONA; typedef struct _NTMS_CHANGERINFORMATIONW { DWORD Number; NTMS_GUID ChangerType; WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; WCHAR szRevision[NTMS_REVISION_LENGTH]; WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; NTMS_GUID Library; } NTMS_CHANGERINFORMATIONW; enum NtmsSlotState { NTMS_SLOTSTATE_UNKNOWN = 0, NTMS_SLOTSTATE_FULL = 1, NTMS_SLOTSTATE_EMPTY = 2, NTMS_SLOTSTATE_NOTPRESENT = 3, NTMS_SLOTSTATE_NEEDSINVENTORY = 4 }; typedef struct _NTMS_STORAGESLOTINFORMATION { DWORD Number; DWORD State; NTMS_GUID Library; } NTMS_STORAGESLOTINFORMATION; enum NtmsDoorState { NTMS_DOORSTATE_UNKNOWN = 0, NTMS_DOORSTATE_CLOSED = 1, NTMS_DOORSTATE_OPEN = 2 }; typedef struct _NTMS_IEDOORINFORMATION { DWORD Number; DWORD State; WORD MaxOpenSecs; NTMS_GUID Library; } NTMS_IEDOORINFORMATION; enum NtmsPortPosition { NTMS_PORTPOSITION_UNKNOWN = 0, NTMS_PORTPOSITION_EXTENDED = 1, NTMS_PORTPOSITION_RETRACTED = 2 }; enum NtmsPortContent { NTMS_PORTCONTENT_UNKNOWN = 0, NTMS_PORTCONTENT_FULL = 1, NTMS_PORTCONTENT_EMPTY = 2 }; typedef struct _NTMS_IEPORTINFORMATION { DWORD Number; DWORD Content; DWORD Position; WORD MaxExtendSecs; NTMS_GUID Library; } NTMS_IEPORTINFORMATION; enum NtmsBarCodeState { NTMS_BARCODESTATE_OK = 1, NTMS_BARCODESTATE_UNREADABLE = 2 }; 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, // media is waiting for operator request servicing NTMS_MEDIASTATE_OPREQ = 6 }; #ifdef UNICODE #define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONW #define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONW #else #define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONA #define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONA #endif typedef struct _NTMS_PMIDINFORMATIONA { NTMS_GUID CurrentLibrary; // the current library NTMS_GUID MediaPool; // media pool that the media belongs to NTMS_GUID Location; // actual location of the media DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media CHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string DWORD BarCodeState; // current state of the bar code CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state DWORD dwNumberOfPartitions; DWORD dwMediaTypeCode; DWORD dwDensityCode; NTMS_GUID MountedPartition; } NTMS_PMIDINFORMATIONA; typedef struct _NTMS_PMIDINFORMATIONW { NTMS_GUID CurrentLibrary; // the current library NTMS_GUID MediaPool; // media pool that the media belongs to NTMS_GUID Location; // actual location of the media DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media WCHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string DWORD BarCodeState; // current state of the bar code WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state DWORD dwNumberOfPartitions; DWORD dwMediaTypeCode; DWORD dwDensityCode; NTMS_GUID MountedPartition; } NTMS_PMIDINFORMATIONW; typedef struct _NTMS_LMIDINFORMATION { NTMS_GUID MediaPool; DWORD dwNumberOfPartitions; } NTMS_LMIDINFORMATION; 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 }; // define the new state as the unknown state for now. #define NTMS_PARTSTATE_NEW NTMS_PARTSTATE_UNKNOWN #ifdef UNICODE #define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONW #define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONW #else #define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONA #define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONA #endif typedef struct _NTMS_PARTITIONINFORMATIONA { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH]; CHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH]; // type string CHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH]; // info string DWORD dwMountCount; DWORD dwAllocateCount; LARGE_INTEGER Capacity; } NTMS_PARTITIONINFORMATIONA; typedef struct _NTMS_PARTITIONINFORMATIONW { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH]; WCHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH]; // type string WCHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH]; // info string DWORD dwMountCount; DWORD dwAllocateCount; LARGE_INTEGER Capacity; } NTMS_PARTITIONINFORMATIONW; enum NtmsPoolType { NTMS_POOLTYPE_UNKNOWN = 0, NTMS_POOLTYPE_SCRATCH = 1, NTMS_POOLTYPE_FOREIGN = 2, NTMS_POOLTYPE_IMPORT = 3, NTMS_POOLTYPE_APPLICATION = 1000 }; enum NtmsAllocationPolicy { NTMS_ALLOCATE_FROMSCRATCH = 1 }; enum NtmsDeallocationPolicy { NTMS_DEALLOCATE_TOSCRATCH = 1 }; 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; enum NtmsReadWriteCharacteristics { NTMS_MEDIARW_UNKNOWN = 0, NTMS_MEDIARW_REWRITABLE = 1, NTMS_MEDIARW_WRITEONCE = 2, NTMS_MEDIARW_READONLY = 3 }; typedef struct _NTMS_MEDIATYPEINFORMATION { DWORD MediaType; // MediaTypeCodes DWORD NumberOfSides; DWORD ReadWriteCharacteristics; DWORD DeviceType; } NTMS_MEDIATYPEINFORMATION; #ifdef UNICODE #define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONW #define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONW #else #define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONA #define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONA #endif typedef struct _NTMS_DRIVETYPEINFORMATIONA { CHAR szVendor[NTMS_VENDORNAME_LENGTH]; CHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD NumberOfHeads; DWORD DeviceType; } NTMS_DRIVETYPEINFORMATIONA; typedef struct _NTMS_DRIVETYPEINFORMATIONW { WCHAR szVendor[NTMS_VENDORNAME_LENGTH]; WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD NumberOfHeads; DWORD DeviceType; } NTMS_DRIVETYPEINFORMATIONW; #ifdef UNICODE #define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONW #define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONW #else #define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONA #define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONA #endif typedef struct _NTMS_CHANGERTYPEINFORMATIONA { CHAR szVendor[NTMS_VENDORNAME_LENGTH]; CHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD DeviceType; } NTMS_CHANGERTYPEINFORMATIONA; typedef struct _NTMS_CHANGERTYPEINFORMATIONW { WCHAR szVendor[NTMS_VENDORNAME_LENGTH]; WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD DeviceType; } NTMS_CHANGERTYPEINFORMATIONW; // // Support both CHANGER & LIBRARY for (Dis/Enable) - backwards compatibility // 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, NTMS_LM_MAXWORKITEM }; 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_DEFERRED = 6, NTMS_LM_DEFFERED = 6, // DO NOT USE. Maintained for backward compatiblity NTMS_LM_CANCELLED = 7, NTMS_LM_STOPPED = 8 }; #ifdef UNICODE #define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONW #define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONW #else #define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONA #define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONA #endif 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[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; DWORD dwErrorCode; // error value if state = FAILED NTMS_GUID WorkItemId; // work item id for cancel and other requests that DWORD dwPriority; // require and associated work item } 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; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; DWORD dwErrorCode; // error value if state = FAILED NTMS_GUID WorkItemId; // work item id for cancel and other requests that DWORD dwPriority; // require and associated work item } NTMS_LIBREQUESTINFORMATIONW; 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 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 }; #ifdef UNICODE #define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONW #define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONW #else #define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONA #define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONA #endif typedef struct _NTMS_OPREQUESTINFORMATIONA { DWORD Request; SYSTEMTIME Submitted; DWORD State; CHAR szMessage[NTMS_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_OPREQUESTINFORMATIONA; typedef struct _NTMS_OPREQUESTINFORMATIONW { DWORD Request; SYSTEMTIME Submitted; DWORD State; WCHAR szMessage[NTMS_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_OPREQUESTINFORMATIONW; typedef struct _NTMS_COMPUTERINFORMATION { DWORD dwLibRequestPurgeTime; DWORD dwOpRequestPurgeTime; DWORD dwLibRequestFlags; DWORD dwOpRequestFlags; DWORD dwMediaPoolPolicy; } NTMS_COMPUTERINFORMATION; // library request option flags enum NtmsLibRequestFlags { NTMS_LIBREQFLAGS_NOAUTOPURGE = 0x01, NTMS_LIBREQFLAGS_NOFAILEDPURGE = 0x02 }; // operator request option flags enum NtmsOpRequestFlags { NTMS_OPREQFLAGS_NOAUTOPURGE = 0x01, NTMS_OPREQFLAGS_NOFAILEDPURGE = 0x02, NTMS_OPREQFLAGS_NOALERTS = 0x10, NTMS_OPREQFLAGS_NOTRAYICON = 0x20 }; // media pool policy flags enum NtmsMediaPoolPolicy { // purge offline scratch media. By default we keep offline scratch media // in the fixed offline media pool NTMS_POOLPOLICY_PURGEOFFLINESCRATCH = 0x01, NTMS_POOLPOLICY_KEEPOFFLINEIMPORT = 0x02 }; #ifdef UNICODE #define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONW #define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONW #define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONW #else #define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONA #define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONA #define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONA #endif enum NtmsOperationalState { NTMS_READY = 0, NTMS_INITIALIZING = 10, NTMS_NEEDS_SERVICE = 20, NTMS_NOT_PRESENT = 21 }; typedef struct _NTMS_OBJECTINFORMATIONA { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; CHAR szName[NTMS_OBJECTNAME_LENGTH]; CHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS [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; [default] ; } Info; #else union { NTMS_DRIVEINFORMATIONA Drive; NTMS_DRIVETYPEINFORMATIONA DriveType; NTMS_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONA Changer; NTMS_CHANGERTYPEINFORMATIONA ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_PMIDINFORMATIONA PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_PARTITIONINFORMATIONA Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_LIBREQUESTINFORMATIONA LibRequest; NTMS_OPREQUESTINFORMATIONA OpRequest; NTMS_COMPUTERINFORMATION Computer; } Info; #endif // MIDL_PASS } NTMS_OBJECTINFORMATIONA, *LPNTMS_OBJECTINFORMATIONA; typedef struct _NTMS_OBJECTINFORMATIONW { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; WCHAR szName[NTMS_OBJECTNAME_LENGTH]; WCHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS [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; [default] ; } Info; #else union { NTMS_DRIVEINFORMATIONW Drive; NTMS_DRIVETYPEINFORMATIONW DriveType; NTMS_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONW Changer; NTMS_CHANGERTYPEINFORMATIONW ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_PMIDINFORMATIONW PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_PARTITIONINFORMATIONW Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_LIBREQUESTINFORMATIONW LibRequest; NTMS_OPREQUESTINFORMATIONW OpRequest; NTMS_COMPUTERINFORMATION Computer; } Info; #endif // MIDL_PASS } NTMS_OBJECTINFORMATIONW, *LPNTMS_OBJECTINFORMATIONW; //******************************************************************************** // NT 5.0 BETA1 variations of object information. Required to keep here for // backward compatibility in DCOM interface. // Different data structures add the _I1_ to the structure name, denoting // used for Interface 1 only. // DO NOT MODIFY IN FUTURE VERSIONS !! //******************************************************************************** #ifdef UNICODE #define NTMS_I1_LIBREQUESTINFORMATION NTMS_I1_LIBREQUESTINFORMATIONW #define NTMS_I1_PARTITIONINFORMATION NTMS_I1_PARTITIONINFORMATIONW #define NTMS_I1_PMIDINFORMATION NTMS_I1_PMIDINFORMATIONW #define NTMS_I1_OPREQUESTINFORMATION NTMS_I1_OPREQUESTINFORMATIONW #define NTMS_I1_OBJECTINFORMATION NTMS_I1_OBJECTINFORMATIONW #else #define NTMS_I1_LIBREQUESTINFORMATION NTMS_I1_LIBREQUESTINFORMATIONA #define NTMS_I1_PARTITIONINFORMATION NTMS_I1_PARTITIONINFORMATIONA #define NTMS_I1_PMIDINFORMATION NTMS_I1_PMIDINFORMATIONA #define NTMS_I1_OPREQUESTINFORMATION NTMS_I1_OPREQUESTINFORMATIONA #define NTMS_I1_OBJECTINFORMATION NTMS_I1_OBJECTINFORMATIONA #endif typedef struct _NTMS_I1_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; } NTMS_I1_LIBRARYINFORMATION; typedef struct _NTMS_I1_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[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_LIBREQUESTINFORMATIONA; typedef struct _NTMS_I1_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; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_LIBREQUESTINFORMATIONW; typedef struct _NTMS_I1_PMIDINFORMATIONA { NTMS_GUID CurrentLibrary; // the current library NTMS_GUID MediaPool; // media pool that the media belongs to NTMS_GUID Location; // actual location of the media DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media CHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string DWORD BarCodeState; // current state of the bar code CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state DWORD dwNumberOfPartitions; } NTMS_I1_PMIDINFORMATIONA; typedef struct _NTMS_I1_PMIDINFORMATIONW { NTMS_GUID CurrentLibrary; // the current library NTMS_GUID MediaPool; // media pool that the media belongs to NTMS_GUID Location; // actual location of the media DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media WCHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string DWORD BarCodeState; // current state of the bar code WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state DWORD dwNumberOfPartitions; } NTMS_I1_PMIDINFORMATIONW; typedef struct _NTMS_I1_PARTITIONINFORMATIONA { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id BYTE OmidLabelId[255]; CHAR szOmidLabelType[64]; // type string CHAR szOmidLabelInfo[256]; // info string DWORD dwMountCount; DWORD dwAllocateCount; } NTMS_I1_PARTITIONINFORMATIONA; typedef struct _NTMS_I1_PARTITIONINFORMATIONW { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id BYTE OmidLabelId[255]; WCHAR szOmidLabelType[64]; // type string WCHAR szOmidLabelInfo[256]; // info string DWORD dwMountCount; DWORD dwAllocateCount; } NTMS_I1_PARTITIONINFORMATIONW; typedef struct _NTMS_I1_OPREQUESTINFORMATIONA { DWORD Request; SYSTEMTIME Submitted; DWORD State; CHAR szMessage[NTMS_I1_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_OPREQUESTINFORMATIONA; typedef struct _NTMS_I1_OPREQUESTINFORMATIONW { DWORD Request; SYSTEMTIME Submitted; DWORD State; WCHAR szMessage[NTMS_I1_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_OPREQUESTINFORMATIONW; typedef struct _NTMS_I1_OBJECTINFORMATIONA { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; CHAR szName[NTMS_OBJECTNAME_LENGTH]; CHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS [switch_is(dwType)] union { [case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONA Drive; [case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONA DriveType; [case(NTMS_LIBRARY)] NTMS_I1_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_I1_PMIDINFORMATIONA PhysicalMedia; [case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia; [case(NTMS_PARTITION)] NTMS_I1_PARTITIONINFORMATIONA Partition; [case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool; [case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType; [case(NTMS_LIBREQUEST)] NTMS_I1_LIBREQUESTINFORMATIONA LibRequest; [case(NTMS_OPREQUEST)] NTMS_I1_OPREQUESTINFORMATIONA OpRequest; [default] ; } Info; #else union { NTMS_DRIVEINFORMATIONA Drive; NTMS_DRIVETYPEINFORMATIONA DriveType; NTMS_I1_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONA Changer; NTMS_CHANGERTYPEINFORMATIONA ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_I1_PMIDINFORMATIONA PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_I1_PARTITIONINFORMATIONA Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_I1_LIBREQUESTINFORMATIONA LibRequest; NTMS_I1_OPREQUESTINFORMATIONA OpRequest; } Info; #endif // MIDL_PASS } NTMS_I1_OBJECTINFORMATIONA, *LPNTMS_I1_OBJECTINFORMATIONA; typedef struct _NTMS_I1_OBJECTINFORMATIONW { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; WCHAR szName[NTMS_OBJECTNAME_LENGTH]; WCHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS [switch_is(dwType)] union { [case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONW Drive; [case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONW DriveType; [case(NTMS_LIBRARY)] NTMS_I1_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_I1_PMIDINFORMATIONW PhysicalMedia; [case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia; [case(NTMS_PARTITION)] NTMS_I1_PARTITIONINFORMATIONW Partition; [case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool; [case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType; [case(NTMS_LIBREQUEST)] NTMS_I1_LIBREQUESTINFORMATIONW LibRequest; [case(NTMS_OPREQUEST)] NTMS_I1_OPREQUESTINFORMATIONW OpRequest; [default] ; } Info; #else union { NTMS_DRIVEINFORMATIONW Drive; NTMS_DRIVETYPEINFORMATIONW DriveType; NTMS_I1_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONW Changer; NTMS_CHANGERTYPEINFORMATIONW ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_I1_PMIDINFORMATIONW PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_I1_PARTITIONINFORMATIONW Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_I1_LIBREQUESTINFORMATIONW LibRequest; NTMS_I1_OPREQUESTINFORMATIONW OpRequest; } Info; #endif // MIDL_PASS } NTMS_I1_OBJECTINFORMATIONW, *LPNTMS_I1_OBJECTINFORMATIONW; #endif // NTMS_NOREDEF #ifndef NTMS_NOREDEF //======================================================================= // CREATENTMSMEDIA DEFINITIONS //======================================================================= enum NtmsCreateNtmsMediaOptions { NTMS_ERROR_ON_DUPLICATE = 0x0001 }; #endif #ifndef MIDL_PASS //====================================================================== // OBJECT MANAGEMENT APIS //====================================================================== #ifdef PRE_SEVIL DWORD WINAPI GetNtmsObjectInformation( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATION lpInfo ); DWORD WINAPI SetNtmsObjectInformation( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATION lpInfo ); #endif // Added by SEvilia DWORD WINAPI GetNtmsObjectInformationA( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONA lpInfo ); DWORD WINAPI GetNtmsObjectInformationW( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONW lpInfo ); DWORD WINAPI SetNtmsObjectInformationA( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONA lpInfo ); DWORD WINAPI SetNtmsObjectInformationW( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONW lpInfo ); // END of SEVILIA DWORD WINAPI CreateNtmsMediaA( HANDLE hSession, LPNTMS_OBJECTINFORMATIONA lpMedia, LPNTMS_OBJECTINFORMATIONA lpList, DWORD dwOptions ) ; DWORD WINAPI CreateNtmsMediaW( HANDLE hSession, LPNTMS_OBJECTINFORMATIONW lpMedia, LPNTMS_OBJECTINFORMATIONW lpList, DWORD dwOptions ) ; enum NtmsEnumerateOption { NTMS_ENUM_DEFAULT = 0, NTMS_ENUM_ROOTPOOL = 1 }; DWORD WINAPI EnumerateNtmsObject( HANDLE hSession, const LPNTMS_GUID lpContainerId, LPNTMS_GUID lpList, LPDWORD lpdwListSize, DWORD dwType, DWORD dwOptions ); DWORD WINAPI DisableNtmsObject( HANDLE hSession, DWORD dwType, LPNTMS_GUID lpObjectId ); DWORD WINAPI EnableNtmsObject( HANDLE hSession, DWORD dwType, LPNTMS_GUID lpObjectId ); 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 }; DWORD WINAPI EjectNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpEjectOperation, DWORD dwAction ); enum NtmsInjectOperation { NTMS_INJECT_START = 0, NTMS_INJECT_STOP = 1, NTMS_INJECT_RETRACT = 2, NTMS_INJECT_STARTMANY = 3 }; DWORD WINAPI InjectNtmsMedia( HANDLE hSession, LPNTMS_GUID lpLibraryId, LPNTMS_GUID lpInjectOperation, DWORD dwAction ); DWORD WINAPI AccessNtmsLibraryDoor( HANDLE hSession, LPNTMS_GUID lpLibraryId, DWORD dwAction ); DWORD WINAPI CleanNtmsDrive( HANDLE hSession, LPNTMS_GUID lpDriveId ); DWORD WINAPI DismountNtmsDrive( HANDLE hSession, LPNTMS_GUID lpDriveId ); DWORD WINAPI InventoryNtmsLibrary( HANDLE hSession, LPNTMS_GUID lpLibraryId, DWORD dwAction ); DWORD WINAPI IdentifyNtmsSlot( HANDLE hSession, LPNTMS_GUID lpSlotId, DWORD dwOption ); // definitions for the UpdateNtmsOmidInfo ... #define NTMS_OMID_TYPE_RAW_LABEL 0x01 #define NTMS_OMID_TYPE_FILESYSTEM_INFO 0x02 typedef struct { WCHAR FileSystemType[64] ; WCHAR VolumeName[256] ; DWORD SerialNumber ; } NTMS_FILESYSTEM_INFO ; DWORD WINAPI UpdateNtmsOmidInfo( HANDLE hSession, LPNTMS_GUID lpMediaId, DWORD labelType, DWORD numberOfBytes, LPVOID lpBuffer ); DWORD WINAPI CancelNtmsLibraryRequest( HANDLE hSession, LPNTMS_GUID lpRequestId ); DWORD WINAPI GetNtmsRequestOrder( HANDLE hSession, LPNTMS_GUID lpRequestId, LPDWORD lpdwOrderNumber ); DWORD WINAPI SetNtmsRequestOrder( HANDLE hSession, LPNTMS_GUID lpRequestId, DWORD dwOrderNumber ); DWORD WINAPI DeleteNtmsRequests( HANDLE hSession, LPNTMS_GUID lpRequestId, DWORD dwType, DWORD dwCount ); DWORD WINAPI ReserveNtmsCleanerSlot ( HANDLE hSession, LPNTMS_GUID lpLibrary, LPNTMS_GUID lpSlot ); DWORD WINAPI ReleaseNtmsCleanerSlot ( HANDLE hSession, LPNTMS_GUID lpLibrary ); DWORD WINAPI InjectNtmsCleaner ( HANDLE hSession, LPNTMS_GUID lpLibrary, LPNTMS_GUID lpInjectOperation, DWORD dwNumberOfCleansLeft, DWORD dwAction ); DWORD WINAPI EjectNtmsCleaner ( HANDLE hSession, LPNTMS_GUID lpLibrary, LPNTMS_GUID lpEjectOperation, DWORD dwAction ); DWORD WINAPI BeginNtmsDeviceChangeDetection( HANDLE hSession, LPHANDLE lpDetectHandle ); DWORD WINAPI SetNtmsDeviceChangeDetection( HANDLE hSession, HANDLE DetectHandle, LPNTMS_GUID lpRequestId, DWORD dwType, DWORD dwCount ); DWORD WINAPI EndNtmsDeviceChangeDetection( HANDLE hSession, HANDLE DetectHandle ); #endif // MIDL_PASS #ifndef NTMS_NOREDEF enum NtmsDriveType { NTMS_UNKNOWN_DRIVE = 0 }; #endif // NTMS_NOREDEF #ifndef MIDL_PASS // Security for NTMS API DWORD WINAPI GetNtmsObjectSecurity( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor, DWORD nLength, LPDWORD lpnLengthNeeded ); DWORD WINAPI SetNtmsObjectSecurity( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor ); // Security Access Control Masks : // NTMS_USE_ACCESS is required to use an NTMS object. For example, // you will need this access to a library in order to mount media // within it. // NTMS_MODIFY_ACCESS is required to make changes to an NTMS object. // For example, you will need modify access in order to change the name // of an object or change its attributes. // NTMS_CONTROL_ACCESS is required to control an NTMS object. For // example, you will need control access to a library in order to // inject media, eject media, clean or open the door. // enum NtmsAccessMask { NTMS_USE_ACCESS = 0x1, NTMS_MODIFY_ACCESS = 0x2, NTMS_CONTROL_ACCESS = 0x4 }; // 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 // Maximum attribute size for NTMS Object attribute API's #define NTMS_MAXATTR_LENGTH 0x10000 // Maximum len of attribute name (# of chars.) #define NTMS_MAXATTR_NAMELEN 32 // Object extensions for NTMS API DWORD WINAPI GetNtmsObjectAttributeA( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCSTR lpAttributeName, LPVOID lpAttributeData, LPDWORD lpAttributeSize ); DWORD WINAPI GetNtmsObjectAttributeW( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCWSTR lpAttributeName, LPVOID lpAttributeData, LPDWORD lpAttributeSize ); DWORD WINAPI SetNtmsObjectAttributeA( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCSTR lpAttributeName, LPVOID lpAttributeData, DWORD dwAttributeSize ); DWORD WINAPI SetNtmsObjectAttributeW( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCWSTR lpAttributeName, LPVOID lpAttributeData, DWORD AttributeSize ); //UI Notification enum NtmsUITypes { NTMS_UITYPE_INVALID = 0, NTMS_UITYPE_INFO, NTMS_UITYPE_REQ, NTMS_UITYPE_ERR, NTMS_UITYPE_MAX }; enum NtmsUIOperations { NTMS_UIDEST_ADD = 1, NTMS_UIDEST_DELETE, NTMS_UIDEST_DELETEALL, NTMS_UIOPERATION_MAX }; DWORD WINAPI GetNtmsUIOptionsA( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, LPSTR lpszDestination, LPDWORD lpAttributeSize ); DWORD WINAPI GetNtmsUIOptionsW( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, LPWSTR lpszDestination, LPDWORD lpdwSize ); DWORD WINAPI SetNtmsUIOptionsA( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, DWORD dwOperation, LPCSTR lpszDestination ); DWORD WINAPI SetNtmsUIOptionsW( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, DWORD dwOperation, LPCWSTR lpszDestination ); // Operator Requests DWORD WINAPI SubmitNtmsOperatorRequestW( HANDLE hSession, DWORD dwRequest, LPCWSTR lpMessage, LPNTMS_GUID lpArg1Id, LPNTMS_GUID lpArg2Id, LPNTMS_GUID lpRequestId ); DWORD WINAPI SubmitNtmsOperatorRequestA( HANDLE hSession, DWORD dwRequest, LPCSTR lpMessage, LPNTMS_GUID lpArg1Id, LPNTMS_GUID lpArg2Id, LPNTMS_GUID lpRequestId ); DWORD WINAPI WaitForNtmsOperatorRequest( HANDLE hSession, LPNTMS_GUID lpRequestId, DWORD dwTimeout ); DWORD WINAPI CancelNtmsOperatorRequest( HANDLE hSession, LPNTMS_GUID lpRequestId ); DWORD WINAPI SatisfyNtmsOperatorRequest( HANDLE hSession, LPNTMS_GUID lpRequestId ); #endif // MIDL_PASS #ifndef NTMS_NOREDEF enum NtmsNotificationOperations { NTMS_OBJ_UPDATE = 1, NTMS_OBJ_INSERT = 2, NTMS_OBJ_DELETE = 3, NTMS_EVENT_SIGNAL = 4, NTMS_EVENT_COMPLETE = 5 }; // object notification typedef struct _NTMS_NOTIFICATIONINFORMATION { DWORD dwOperation; NTMS_GUID ObjectId; } NTMS_NOTIFICATIONINFORMATION, *LPNTMS_NOTIFICATIONINFORMATION; #endif // NTMS_NOREDEF #ifndef MIDL_PASS DWORD WINAPI ImportNtmsDatabase( HANDLE hSession ); DWORD WINAPI ExportNtmsDatabase( HANDLE hSession ); #endif // MIDL_PASS #ifndef MIDL_PASS DWORD WINAPI ImportNtmsDatabase( HANDLE hSession ); DWORD WINAPI ExportNtmsDatabase( HANDLE hSession ); #endif // MIDL_PASS #ifndef MIDL_PASS HANDLE WINAPI OpenNtmsNotification( HANDLE hSession, DWORD dwType ); DWORD WINAPI WaitForNtmsNotification( HANDLE hNotification, LPNTMS_NOTIFICATIONINFORMATION lpNotificationInformation, DWORD dwTimeout ); DWORD WINAPI CloseNtmsNotification( HANDLE hNotification ); #endif // MIDL_PASS #ifndef MIDL_PASS DWORD WINAPI EjectDiskFromSADriveW( LPCWSTR lpComputerName, LPCWSTR lpAppName, LPCWSTR lpDeviceName, HWND hWnd, LPCWSTR lpTitle, LPCWSTR lpMessage, DWORD dwOptions ); DWORD WINAPI EjectDiskFromSADriveA( LPCSTR lpComputerName, LPCSTR lpAppName, LPCSTR lpDeviceName, HWND hWnd, LPCSTR lpTitle, LPCSTR lpMessage, DWORD dwOptions ); #endif #ifndef MIDL_PASS DWORD WINAPI GetVolumesFromDriveW( LPWSTR pszDriveName, LPWSTR *VolumeNameBufferPtr, LPWSTR *DriveLetterBufferPtr ); DWORD WINAPI GetVolumesFromDriveA( LPSTR pszDriveName, LPSTR* VolumeNameBufferPtr, LPSTR* DriveLetterBufferPtr ); #endif #ifdef __cplusplus } // end extern "C" #endif #pragma pack() #endif // _INCL_NTMSAPI_H_