|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  | #ifndef _INCL_NTMSAPI_H_ | 
|  | #define _INCL_NTMSAPI_H_ | 
|  |  | 
|  | #include <_mingw_unicode.h> | 
|  |  | 
|  | #pragma pack(8) | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /* See http://msdn.microsoft.com/en-us/library/cc245176%28PROT.13%29.aspx */ | 
|  | typedef GUID NTMS_GUID; | 
|  | typedef GUID *LPNTMS_GUID; | 
|  | typedef BYTE *PSECURITY_DESCRIPTOR_NTMS; | 
|  | typedef ULONG_PTR NTMS_HANDLE; | 
|  |  | 
|  |  | 
|  | #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 OpenNtmsSession __MINGW_NAME_AW(OpenNtmsSession) | 
|  | #define GetNtmsDeviceName __MINGW_NAME_AW(GetNtmsDeviceName) | 
|  | #define GetNtmsObjectInformation __MINGW_NAME_AW(GetNtmsObjectInformation) | 
|  | #define SetNtmsObjectInformation __MINGW_NAME_AW(SetNtmsObjectInformation) | 
|  | #define CreateNtmsMediaPool __MINGW_NAME_AW(CreateNtmsMediaPool) | 
|  | #define GetNtmsMediaPoolName __MINGW_NAME_AW(GetNtmsMediaPoolName) | 
|  | #define GetNtmsObjectAttribute __MINGW_NAME_AW(GetNtmsObjectAttribute) | 
|  | #define SetNtmsObjectAttribute __MINGW_NAME_AW(SetNtmsObjectAttribute) | 
|  | #define GetNtmsUIOptions __MINGW_NAME_AW(GetNtmsUIOptions) | 
|  | #define SetNtmsUIOptions __MINGW_NAME_AW(SetNtmsUIOptions) | 
|  | #define SubmitNtmsOperatorRequest __MINGW_NAME_AW(SubmitNtmsOperatorRequest) | 
|  |  | 
|  | #define CreateNtmsMedia __MINGW_NAME_AW(CreateNtmsMedia) | 
|  | #define EjectDiskFromSADrive __MINGW_NAME_AW(EjectDiskFromSADrive) | 
|  | #define GetVolumesFromDrive __MINGW_NAME_AW(GetVolumesFromDrive) | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  |  | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | typedef struct _NTMS_ASYNC_IO { | 
|  | NTMS_GUID OperationId; | 
|  | NTMS_GUID EventId; | 
|  | DWORD dwOperationType; | 
|  | DWORD dwResult; | 
|  | DWORD dwAsyncState; | 
|  | HANDLE hEvent; | 
|  | WINBOOL bOnStateChange; | 
|  | } NTMS_ASYNC_IO,*LPNTMS_ASYNC_IO; | 
|  |  | 
|  | enum NtmsAsyncStatus { | 
|  | NTMS_ASYNCSTATE_QUEUED = 0,NTMS_ASYNCSTATE_WAIT_RESOURCE,NTMS_ASYNCSTATE_WAIT_OPERATOR,NTMS_ASYNCSTATE_INPROCESS,NTMS_ASYNCSTATE_COMPLETE | 
|  | }; | 
|  |  | 
|  | enum NtmsAsyncOperations { | 
|  | NTMS_ASYNCOP_MOUNT = 1 | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | 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); | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  |  | 
|  | 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; | 
|  | LPVOID lpReserved; | 
|  | } NTMS_MOUNT_INFORMATION,*LPNTMS_MOUNT_INFORMATION; | 
|  | #endif | 
|  |  | 
|  | 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); | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  | enum NtmsAllocateOptions { | 
|  | NTMS_ALLOCATE_NEW = 0x0001,NTMS_ALLOCATE_NEXT = 0x0002,NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE = 0x0004 | 
|  | }; | 
|  |  | 
|  | typedef struct _NTMS_ALLOCATION_INFORMATION { | 
|  | DWORD dwSize; | 
|  | LPVOID lpReserved; | 
|  | NTMS_GUID AllocatedFrom; | 
|  | } NTMS_ALLOCATION_INFORMATION,*LPNTMS_ALLOCATION_INFORMATION; | 
|  | #endif | 
|  |  | 
|  | DWORD WINAPI AllocateNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaPool,LPNTMS_GUID lpPartition,LPNTMS_GUID lpMediaId,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); | 
|  | DWORD WINAPI DecommissionNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId); | 
|  | DWORD WINAPI SetNtmsMediaComplete(HANDLE hSession,LPNTMS_GUID lpMediaId); | 
|  | DWORD WINAPI DeleteNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId); | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  | enum NtmsCreateOptions { | 
|  | NTMS_OPEN_EXISTING = 0x0001,NTMS_CREATE_NEW = 0x0002,NTMS_OPEN_ALWAYS = 0x0003 | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #ifdef PRE_SEVIL | 
|  | DWORD WINAPI CreateNtmsMediaPool(HANDLE hSession,LPCTSTR lpPoolName,LPNTMS_GUID lpMediaType,DWORD dwAction,LPSECURITY_ATTRIBUTES lpSecurityAttributes,LPNTMS_GUID lpPoolId); | 
|  | #endif | 
|  | DWORD WINAPI CreateNtmsMediaPoolA(HANDLE hSession,LPCSTR lpPoolName,LPNTMS_GUID lpMediaType,DWORD dwAction,LPSECURITY_ATTRIBUTES lpSecurityAttributes,LPNTMS_GUID lpPoolId); | 
|  | DWORD WINAPI CreateNtmsMediaPoolW(HANDLE hSession,LPCWSTR lpPoolName,LPNTMS_GUID lpMediaType,DWORD dwAction,LPSECURITY_ATTRIBUTES lpSecurityAttributes,LPNTMS_GUID lpPoolId); | 
|  | DWORD WINAPI GetNtmsMediaPoolNameA(HANDLE hSession,LPNTMS_GUID lpPoolId,LPSTR lpNameBuf,LPDWORD lpdwBufSize); | 
|  | DWORD WINAPI GetNtmsMediaPoolNameW(HANDLE hSession,LPNTMS_GUID lpPoolId,LPWSTR lpNameBuf,LPDWORD lpdwBufSize); | 
|  | 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); | 
|  |  | 
|  | #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 | 
|  |  | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | #define _NTMS_DRIVEINFORMATION __MINGW_NAME_AW(_NTMS_DRIVEINFORMATION) | 
|  | #define NTMS_DRIVEINFORMATION __MINGW_NAME_AW(NTMS_DRIVEINFORMATION) | 
|  |  | 
|  | 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 | 
|  | }; | 
|  |  | 
|  | 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; | 
|  | WINBOOL LibrarySupportsDriveCleaning; | 
|  | WINBOOL 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; | 
|  | WINBOOL AutoRecovery; | 
|  | DWORD dwFlags; | 
|  | } NTMS_LIBRARYINFORMATION; | 
|  |  | 
|  | #define _NTMS_CHANGERINFORMATION __MINGW_NAME_AW(_NTMS_CHANGERINFORMATION) | 
|  | #define NTMS_CHANGERINFORMATION __MINGW_NAME_AW(NTMS_CHANGERINFORMATION) | 
|  |  | 
|  | 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,NTMS_MEDIASTATE_MOUNTED,NTMS_MEDIASTATE_LOADED,NTMS_MEDIASTATE_UNLOADED, | 
|  | NTMS_MEDIASTATE_OPERROR,NTMS_MEDIASTATE_OPREQ | 
|  | }; | 
|  |  | 
|  | #define _NTMS_PMIDINFORMATION __MINGW_NAME_AW(_NTMS_PMIDINFORMATION) | 
|  | #define NTMS_PMIDINFORMATION __MINGW_NAME_AW(NTMS_PMIDINFORMATION) | 
|  |  | 
|  | typedef struct _NTMS_PMIDINFORMATIONA { | 
|  | NTMS_GUID CurrentLibrary; | 
|  | NTMS_GUID MediaPool; | 
|  | NTMS_GUID Location; | 
|  | DWORD LocationType; | 
|  | NTMS_GUID MediaType; | 
|  | NTMS_GUID HomeSlot; | 
|  | CHAR szBarCode[NTMS_BARCODE_LENGTH]; | 
|  | DWORD BarCodeState; | 
|  | CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; | 
|  | 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; | 
|  | WCHAR szBarCode[NTMS_BARCODE_LENGTH]; | 
|  | DWORD BarCodeState; | 
|  | WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; | 
|  | DWORD MediaState; | 
|  | 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,NTMS_PARTSTATE_INCOMPATIBLE,NTMS_PARTSTATE_DECOMMISSIONED, | 
|  | NTMS_PARTSTATE_AVAILABLE,NTMS_PARTSTATE_ALLOCATED,NTMS_PARTSTATE_COMPLETE,NTMS_PARTSTATE_FOREIGN,NTMS_PARTSTATE_IMPORT, | 
|  | NTMS_PARTSTATE_RESERVED | 
|  | }; | 
|  |  | 
|  | #define NTMS_PARTSTATE_NEW NTMS_PARTSTATE_UNKNOWN | 
|  |  | 
|  | #define _NTMS_PARTITIONINFORMATION __MINGW_NAME_AW(_NTMS_PARTITIONINFORMATION) | 
|  | #define NTMS_PARTITIONINFORMATION __MINGW_NAME_AW(NTMS_PARTITIONINFORMATION) | 
|  |  | 
|  | typedef struct _NTMS_PARTITIONINFORMATIONA { | 
|  | NTMS_GUID PhysicalMedia; | 
|  | NTMS_GUID LogicalMedia; | 
|  | DWORD State; | 
|  | WORD Side; | 
|  | DWORD dwOmidLabelIdLength; | 
|  | BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH]; | 
|  | CHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH]; | 
|  | CHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH]; | 
|  | 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; | 
|  | BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH]; | 
|  | WCHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH]; | 
|  | WCHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH]; | 
|  | 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; | 
|  | DWORD NumberOfSides; | 
|  | DWORD ReadWriteCharacteristics; | 
|  | DWORD DeviceType; | 
|  | } NTMS_MEDIATYPEINFORMATION; | 
|  |  | 
|  | #define _NTMS_DRIVETYPEINFORMATION __MINGW_NAME_AW(_NTMS_DRIVETYPEINFORMATION) | 
|  | #define NTMS_DRIVETYPEINFORMATION __MINGW_NAME_AW(NTMS_DRIVETYPEINFORMATION) | 
|  |  | 
|  | 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; | 
|  |  | 
|  | #define _NTMS_CHANGERTYPEINFORMATION __MINGW_NAME_AW(_NTMS_CHANGERTYPEINFORMATION) | 
|  | #define NTMS_CHANGERTYPEINFORMATION __MINGW_NAME_AW(NTMS_CHANGERTYPEINFORMATION) | 
|  |  | 
|  | 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; | 
|  |  | 
|  | 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,NTMS_LM_CANCELLED = 7,NTMS_LM_STOPPED = 8 | 
|  | }; | 
|  |  | 
|  | #define _NTMS_LIBREQUESTINFORMATION __MINGW_NAME_AW(_NTMS_LIBREQUESTINFORMATION) | 
|  | #define NTMS_LIBREQUESTINFORMATION __MINGW_NAME_AW(NTMS_LIBREQUESTINFORMATION) | 
|  |  | 
|  | 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; | 
|  | 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; | 
|  | WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; | 
|  | WCHAR szUser[NTMS_USERNAME_LENGTH]; | 
|  | WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; | 
|  | DWORD dwErrorCode; | 
|  | NTMS_GUID WorkItemId; | 
|  | DWORD dwPriority; | 
|  | } NTMS_LIBREQUESTINFORMATIONW; | 
|  |  | 
|  | enum NtmsOpreqCommand { | 
|  | NTMS_OPREQ_UNKNOWN = 0,NTMS_OPREQ_NEWMEDIA,NTMS_OPREQ_CLEANER,NTMS_OPREQ_DEVICESERVICE,NTMS_OPREQ_MOVEMEDIA, | 
|  | NTMS_OPREQ_MESSAGE | 
|  | }; | 
|  |  | 
|  | enum NtmsOpreqState { | 
|  | NTMS_OPSTATE_UNKNOWN = 0, | 
|  | NTMS_OPSTATE_SUBMITTED,NTMS_OPSTATE_ACTIVE,NTMS_OPSTATE_INPROGRESS,NTMS_OPSTATE_REFUSED, | 
|  | NTMS_OPSTATE_COMPLETE | 
|  | }; | 
|  |  | 
|  | #define _NTMS_OPREQUESTINFORMATION __MINGW_NAME_AW(_NTMS_OPREQUESTINFORMATION) | 
|  | #define NTMS_OPREQUESTINFORMATION __MINGW_NAME_AW(NTMS_OPREQUESTINFORMATION) | 
|  |  | 
|  | 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; | 
|  |  | 
|  | enum NtmsLibRequestFlags { | 
|  | NTMS_LIBREQFLAGS_NOAUTOPURGE = 0x01,NTMS_LIBREQFLAGS_NOFAILEDPURGE = 0x02 | 
|  | }; | 
|  |  | 
|  | enum NtmsOpRequestFlags { | 
|  | NTMS_OPREQFLAGS_NOAUTOPURGE = 0x01,NTMS_OPREQFLAGS_NOFAILEDPURGE = 0x02,NTMS_OPREQFLAGS_NOALERTS = 0x10,NTMS_OPREQFLAGS_NOTRAYICON = 0x20 | 
|  | }; | 
|  |  | 
|  | enum NtmsMediaPoolPolicy { | 
|  | NTMS_POOLPOLICY_PURGEOFFLINESCRATCH = 0x01,NTMS_POOLPOLICY_KEEPOFFLINEIMPORT = 0x02 | 
|  | }; | 
|  |  | 
|  | #define _NTMS_OBJECTINFORMATION __MINGW_NAME_AW(_NTMS_OBJECTINFORMATION) | 
|  | #define NTMS_OBJECTINFORMATION __MINGW_NAME_AW(NTMS_OBJECTINFORMATION) | 
|  | #define LPNTMS_OBJECTINFORMATION __MINGW_NAME_AW(LPNTMS_OBJECTINFORMATION) | 
|  |  | 
|  | enum NtmsOperationalState { | 
|  | NTMS_READY = 0, | 
|  | NTMS_INITIALIZING = 10, | 
|  | NTMS_NEEDS_SERVICE = 20, | 
|  | NTMS_NOT_PRESENT = 21 | 
|  | }; | 
|  |  | 
|  | typedef struct _RSM_MESSAGE { | 
|  | LPGUID lpguidOperation; | 
|  | DWORD dwNtmsType; | 
|  | DWORD dwState; | 
|  | DWORD dwFlags; | 
|  | DWORD dwPriority; | 
|  | DWORD dwErrorCode; | 
|  | LPWSTR lpszComputerName; | 
|  | LPWSTR lpszApplication; | 
|  | LPWSTR lpszUser; | 
|  | LPWSTR lpszTimeSubmitted; | 
|  | LPWSTR lpszMessage; | 
|  | } RSM_MESSAGE, *LPRSM_MESSAGE; | 
|  |  | 
|  | typedef struct _NTMS_OBJECTINFORMATIONA { | 
|  | DWORD dwSize; | 
|  | DWORD dwType; | 
|  | SYSTEMTIME Created; | 
|  | SYSTEMTIME Modified; | 
|  | NTMS_GUID ObjectGuid; | 
|  | WINBOOL Enabled; | 
|  | DWORD dwOperationalState; | 
|  | CHAR szName[NTMS_OBJECTNAME_LENGTH]; | 
|  | CHAR szDescription[NTMS_DESCRIPTION_LENGTH]; | 
|  | 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; | 
|  | } NTMS_OBJECTINFORMATIONA,*LPNTMS_OBJECTINFORMATIONA; | 
|  |  | 
|  | typedef struct _NTMS_OBJECTINFORMATIONW { | 
|  | DWORD dwSize; | 
|  | DWORD dwType; | 
|  | SYSTEMTIME Created; | 
|  | SYSTEMTIME Modified; | 
|  | NTMS_GUID ObjectGuid; | 
|  | WINBOOL Enabled; | 
|  | DWORD dwOperationalState; | 
|  | WCHAR szName[NTMS_OBJECTNAME_LENGTH]; | 
|  | WCHAR szDescription[NTMS_DESCRIPTION_LENGTH]; | 
|  | 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; | 
|  | } NTMS_OBJECTINFORMATIONW,*LPNTMS_OBJECTINFORMATIONW; | 
|  |  | 
|  | #define NTMS_I1_LIBREQUESTINFORMATION __MINGW_NAME_AW(NTMS_I1_LIBREQUESTINFORMATION) | 
|  | #define NTMS_I1_PARTITIONINFORMATION __MINGW_NAME_AW(NTMS_I1_PARTITIONINFORMATION) | 
|  | #define NTMS_I1_PMIDINFORMATION __MINGW_NAME_AW(NTMS_I1_PMIDINFORMATION) | 
|  | #define NTMS_I1_OPREQUESTINFORMATION __MINGW_NAME_AW(NTMS_I1_OPREQUESTINFORMATION) | 
|  | #define NTMS_I1_OBJECTINFORMATION __MINGW_NAME_AW(NTMS_I1_OBJECTINFORMATION) | 
|  |  | 
|  | typedef struct _NTMS_I1_LIBRARYINFORMATION { | 
|  | DWORD LibraryType; | 
|  | NTMS_GUID CleanerSlot; | 
|  | NTMS_GUID CleanerSlotDefault; | 
|  | WINBOOL LibrarySupportsDriveCleaning; | 
|  | WINBOOL 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; | 
|  | NTMS_GUID MediaPool; | 
|  | NTMS_GUID Location; | 
|  | DWORD LocationType; | 
|  | NTMS_GUID MediaType; | 
|  | NTMS_GUID HomeSlot; | 
|  | CHAR szBarCode[NTMS_BARCODE_LENGTH]; | 
|  | DWORD BarCodeState; | 
|  | CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; | 
|  | DWORD MediaState; | 
|  | DWORD dwNumberOfPartitions; | 
|  | } NTMS_I1_PMIDINFORMATIONA; | 
|  |  | 
|  | typedef struct _NTMS_I1_PMIDINFORMATIONW { | 
|  | NTMS_GUID CurrentLibrary; | 
|  | NTMS_GUID MediaPool; | 
|  | NTMS_GUID Location; | 
|  | DWORD LocationType; | 
|  | NTMS_GUID MediaType; | 
|  | NTMS_GUID HomeSlot; | 
|  | WCHAR szBarCode[NTMS_BARCODE_LENGTH]; | 
|  | DWORD BarCodeState; | 
|  | WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; | 
|  | DWORD MediaState; | 
|  | DWORD dwNumberOfPartitions; | 
|  | } NTMS_I1_PMIDINFORMATIONW; | 
|  |  | 
|  | typedef struct _NTMS_I1_PARTITIONINFORMATIONA { | 
|  | NTMS_GUID PhysicalMedia; | 
|  | NTMS_GUID LogicalMedia; | 
|  | DWORD State; | 
|  | WORD Side; | 
|  | DWORD dwOmidLabelIdLength; | 
|  | BYTE OmidLabelId[255]; | 
|  | CHAR szOmidLabelType[64]; | 
|  | CHAR szOmidLabelInfo[256]; | 
|  | DWORD dwMountCount; | 
|  | DWORD dwAllocateCount; | 
|  | } NTMS_I1_PARTITIONINFORMATIONA; | 
|  |  | 
|  | typedef struct _NTMS_I1_PARTITIONINFORMATIONW { | 
|  | NTMS_GUID PhysicalMedia; | 
|  | NTMS_GUID LogicalMedia; | 
|  | DWORD State; | 
|  | WORD Side; | 
|  | DWORD dwOmidLabelIdLength; | 
|  | BYTE OmidLabelId[255]; | 
|  | WCHAR szOmidLabelType[64]; | 
|  | WCHAR szOmidLabelInfo[256]; | 
|  | 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; | 
|  | WINBOOL Enabled; | 
|  | DWORD dwOperationalState; | 
|  | CHAR szName[NTMS_OBJECTNAME_LENGTH]; | 
|  | CHAR szDescription[NTMS_DESCRIPTION_LENGTH]; | 
|  | 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; | 
|  | } NTMS_I1_OBJECTINFORMATIONA,*LPNTMS_I1_OBJECTINFORMATIONA; | 
|  |  | 
|  | typedef struct _NTMS_I1_OBJECTINFORMATIONW { | 
|  | DWORD dwSize; | 
|  | DWORD dwType; | 
|  | SYSTEMTIME Created; | 
|  | SYSTEMTIME Modified; | 
|  | NTMS_GUID ObjectGuid; | 
|  | WINBOOL Enabled; | 
|  | DWORD dwOperationalState; | 
|  | WCHAR szName[NTMS_OBJECTNAME_LENGTH]; | 
|  | WCHAR szDescription[NTMS_DESCRIPTION_LENGTH]; | 
|  | 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; | 
|  | } NTMS_I1_OBJECTINFORMATIONW,*LPNTMS_I1_OBJECTINFORMATIONW; | 
|  | #endif | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  |  | 
|  | enum NtmsCreateNtmsMediaOptions { | 
|  | NTMS_ERROR_ON_DUPLICATE = 0x0001 | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #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 | 
|  | 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); | 
|  | 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); | 
|  |  | 
|  | #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); | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  | enum NtmsDriveType { | 
|  | NTMS_UNKNOWN_DRIVE = 0 | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | 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); | 
|  | enum NtmsAccessMask { | 
|  | NTMS_USE_ACCESS = 0x1, | 
|  | NTMS_MODIFY_ACCESS = 0x2, | 
|  | NTMS_CONTROL_ACCESS = 0x4 /* Hmm, could be 3, too. */ | 
|  | }; | 
|  |  | 
|  | #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 | 
|  |  | 
|  | #define NTMS_MAXATTR_LENGTH 0x10000 | 
|  | #define NTMS_MAXATTR_NAMELEN 32 | 
|  |  | 
|  | 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); | 
|  |  | 
|  | 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 lpdwBufSize); | 
|  | DWORD WINAPI GetNtmsUIOptionsW(HANDLE hSession,const LPNTMS_GUID lpObjectId,DWORD dwType,LPWSTR lpszDestination,LPDWORD lpdwBufSize); | 
|  | 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); | 
|  | 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); | 
|  |  | 
|  | #ifndef NTMS_NOREDEF | 
|  | enum NtmsNotificationOperations { | 
|  | NTMS_OBJ_UPDATE = 1, | 
|  | NTMS_OBJ_INSERT,NTMS_OBJ_DELETE,NTMS_EVENT_SIGNAL,NTMS_EVENT_COMPLETE | 
|  | }; | 
|  |  | 
|  | typedef struct _NTMS_NOTIFICATIONINFORMATION { | 
|  | DWORD dwOperation; | 
|  | NTMS_GUID ObjectId; | 
|  | } NTMS_NOTIFICATIONINFORMATION,*LPNTMS_NOTIFICATIONINFORMATION; | 
|  | #endif | 
|  |  | 
|  | DWORD WINAPI ImportNtmsDatabase(HANDLE hSession); | 
|  | DWORD WINAPI ExportNtmsDatabase(HANDLE hSession); | 
|  | DWORD WINAPI ImportNtmsDatabase(HANDLE hSession); | 
|  | DWORD WINAPI ExportNtmsDatabase(HANDLE hSession); | 
|  | HANDLE WINAPI OpenNtmsNotification(HANDLE hSession,DWORD dwType); | 
|  | DWORD WINAPI WaitForNtmsNotification(HANDLE hNotification,LPNTMS_NOTIFICATIONINFORMATION lpNotificationInformation,DWORD dwTimeout); | 
|  | DWORD WINAPI CloseNtmsNotification(HANDLE hNotification); | 
|  | 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); | 
|  | DWORD WINAPI GetVolumesFromDriveW(LPWSTR pszDriveName,LPWSTR *VolumeNameBufferPtr,LPWSTR *DriveLetterBufferPtr); | 
|  | DWORD WINAPI GetVolumesFromDriveA(LPSTR pszDriveName,LPSTR *VolumeNameBufferPtr,LPSTR *DriveLetterBufferPtr); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #pragma pack() | 
|  | #endif |