Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INCL_NTMSAPI_H_
      7 #define _INCL_NTMSAPI_H_
      8 
      9 #include <_mingw_unicode.h>
     10 
     11 #pragma pack(8)
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17   /* See http://msdn.microsoft.com/en-us/library/cc245176%28PROT.13%29.aspx */
     18   typedef GUID NTMS_GUID;
     19   typedef GUID *LPNTMS_GUID;
     20   typedef BYTE *PSECURITY_DESCRIPTOR_NTMS;
     21   typedef ULONG_PTR NTMS_HANDLE;
     22 
     23 
     24 #define NTMS_NULLGUID {0,0,0,{0,0,0,0,0,0,0,0}}
     25 #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))
     26 
     27 #define OpenNtmsSession __MINGW_NAME_AW(OpenNtmsSession)
     28 #define GetNtmsDeviceName __MINGW_NAME_AW(GetNtmsDeviceName)
     29 #define GetNtmsObjectInformation __MINGW_NAME_AW(GetNtmsObjectInformation)
     30 #define SetNtmsObjectInformation __MINGW_NAME_AW(SetNtmsObjectInformation)
     31 #define CreateNtmsMediaPool __MINGW_NAME_AW(CreateNtmsMediaPool)
     32 #define GetNtmsMediaPoolName __MINGW_NAME_AW(GetNtmsMediaPoolName)
     33 #define GetNtmsObjectAttribute __MINGW_NAME_AW(GetNtmsObjectAttribute)
     34 #define SetNtmsObjectAttribute __MINGW_NAME_AW(SetNtmsObjectAttribute)
     35 #define GetNtmsUIOptions __MINGW_NAME_AW(GetNtmsUIOptions)
     36 #define SetNtmsUIOptions __MINGW_NAME_AW(SetNtmsUIOptions)
     37 #define SubmitNtmsOperatorRequest __MINGW_NAME_AW(SubmitNtmsOperatorRequest)
     38 
     39 #define CreateNtmsMedia __MINGW_NAME_AW(CreateNtmsMedia)
     40 #define EjectDiskFromSADrive __MINGW_NAME_AW(EjectDiskFromSADrive)
     41 #define GetVolumesFromDrive __MINGW_NAME_AW(GetVolumesFromDrive)
     42 
     43 #ifndef NTMS_NOREDEF
     44 
     45   enum NtmsObjectsTypes {
     46     NTMS_UNKNOWN = 0,
     47     NTMS_OBJECT,NTMS_CHANGER,NTMS_CHANGER_TYPE,NTMS_COMPUTER,NTMS_DRIVE,NTMS_DRIVE_TYPE,NTMS_IEDOOR,NTMS_IEPORT,NTMS_LIBRARY,
     48     NTMS_LIBREQUEST,NTMS_LOGICAL_MEDIA,NTMS_MEDIA_POOL,NTMS_MEDIA_TYPE,NTMS_PARTITION,NTMS_PHYSICAL_MEDIA,NTMS_STORAGESLOT,
     49     NTMS_OPREQUEST,NTMS_UI_DESTINATION,NTMS_NUMBER_OF_OBJECT_TYPES
     50   };
     51 
     52   typedef struct _NTMS_ASYNC_IO {
     53     NTMS_GUID OperationId;
     54     NTMS_GUID EventId;
     55     DWORD dwOperationType;
     56     DWORD dwResult;
     57     DWORD dwAsyncState;
     58     HANDLE hEvent;
     59     WINBOOL bOnStateChange;
     60   } NTMS_ASYNC_IO,*LPNTMS_ASYNC_IO;
     61 
     62   enum NtmsAsyncStatus {
     63     NTMS_ASYNCSTATE_QUEUED = 0,NTMS_ASYNCSTATE_WAIT_RESOURCE,NTMS_ASYNCSTATE_WAIT_OPERATOR,NTMS_ASYNCSTATE_INPROCESS,NTMS_ASYNCSTATE_COMPLETE
     64   };
     65 
     66   enum NtmsAsyncOperations {
     67     NTMS_ASYNCOP_MOUNT = 1
     68   };
     69 #endif
     70 
     71   enum NtmsSessionOptions {
     72     NTMS_SESSION_QUERYEXPEDITE = 0x1
     73   };
     74 
     75   HANDLE WINAPI OpenNtmsSessionW(LPCWSTR lpServer,LPCWSTR lpApplication,DWORD dwOptions);
     76   HANDLE WINAPI OpenNtmsSessionA(LPCSTR lpServer,LPCSTR lpApplication,DWORD dwOptions);
     77   DWORD WINAPI CloseNtmsSession(HANDLE hSession);
     78 
     79 #ifndef NTMS_NOREDEF
     80 
     81   enum NtmsMountOptions {
     82     NTMS_MOUNT_READ = 0x0001,NTMS_MOUNT_WRITE = 0x0002,NTMS_MOUNT_ERROR_NOT_AVAILABLE = 0x0004,NTMS_MOUNT_ERROR_IF_UNAVAILABLE = 0x0004,
     83     NTMS_MOUNT_ERROR_OFFLINE = 0x0008,NTMS_MOUNT_ERROR_IF_OFFLINE = 0x0008,NTMS_MOUNT_SPECIFIC_DRIVE = 0x0010,NTMS_MOUNT_NOWAIT = 0x0020
     84   };
     85 
     86   enum NtmsDismountOptions {
     87     NTMS_DISMOUNT_DEFERRED = 0x0001,NTMS_DISMOUNT_IMMEDIATE = 0x0002
     88   };
     89 
     90   enum NtmsMountPriority {
     91     NTMS_PRIORITY_DEFAULT = 0,NTMS_PRIORITY_HIGHEST = 15,NTMS_PRIORITY_HIGH = 7,NTMS_PRIORITY_NORMAL = 0,NTMS_PRIORITY_LOW = -7,
     92     NTMS_PRIORITY_LOWEST = -15
     93   };
     94 
     95   typedef struct _NTMS_MOUNT_INFORMATION {
     96     DWORD dwSize;
     97     LPVOID lpReserved;
     98   } NTMS_MOUNT_INFORMATION,*LPNTMS_MOUNT_INFORMATION;
     99 #endif
    100 
    101   DWORD WINAPI MountNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId,LPNTMS_GUID lpDriveId,DWORD dwCount,DWORD dwOptions,int dwPriority,DWORD dwTimeout,LPNTMS_MOUNT_INFORMATION lpMountInformation);
    102   DWORD WINAPI DismountNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId,DWORD dwCount,DWORD dwOptions);
    103 
    104 #ifndef NTMS_NOREDEF
    105   enum NtmsAllocateOptions {
    106     NTMS_ALLOCATE_NEW = 0x0001,NTMS_ALLOCATE_NEXT = 0x0002,NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE = 0x0004
    107   };
    108 
    109   typedef struct _NTMS_ALLOCATION_INFORMATION {
    110     DWORD dwSize;
    111     LPVOID lpReserved;
    112     NTMS_GUID AllocatedFrom;
    113   } NTMS_ALLOCATION_INFORMATION,*LPNTMS_ALLOCATION_INFORMATION;
    114 #endif
    115 
    116   DWORD WINAPI AllocateNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaPool,LPNTMS_GUID lpPartition,LPNTMS_GUID lpMediaId,DWORD dwOptions,DWORD dwTimeout,LPNTMS_ALLOCATION_INFORMATION lpAllocateInformation);
    117   DWORD WINAPI DeallocateNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId,DWORD dwOptions);
    118   DWORD WINAPI SwapNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId1,LPNTMS_GUID lpMediaId2);
    119   DWORD WINAPI AddNtmsMediaType(HANDLE hSession,LPNTMS_GUID lpMediaTypeId,LPNTMS_GUID lpLibId);
    120   DWORD WINAPI DeleteNtmsMediaType(HANDLE hSession,LPNTMS_GUID lpMediaTypeId,LPNTMS_GUID lpLibId);
    121   DWORD WINAPI ChangeNtmsMediaType(HANDLE hSession,LPNTMS_GUID lpMediaId,LPNTMS_GUID lpPoolId);
    122   DWORD WINAPI DecommissionNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId);
    123   DWORD WINAPI SetNtmsMediaComplete(HANDLE hSession,LPNTMS_GUID lpMediaId);
    124   DWORD WINAPI DeleteNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId);
    125 
    126 #ifndef NTMS_NOREDEF
    127   enum NtmsCreateOptions {
    128     NTMS_OPEN_EXISTING = 0x0001,NTMS_CREATE_NEW = 0x0002,NTMS_OPEN_ALWAYS = 0x0003
    129   };
    130 #endif
    131 
    132 #ifdef PRE_SEVIL
    133   DWORD WINAPI CreateNtmsMediaPool(HANDLE hSession,LPCTSTR lpPoolName,LPNTMS_GUID lpMediaType,DWORD dwAction,LPSECURITY_ATTRIBUTES lpSecurityAttributes,LPNTMS_GUID lpPoolId);
    134 #endif
    135   DWORD WINAPI CreateNtmsMediaPoolA(HANDLE hSession,LPCSTR lpPoolName,LPNTMS_GUID lpMediaType,DWORD dwAction,LPSECURITY_ATTRIBUTES lpSecurityAttributes,LPNTMS_GUID lpPoolId);
    136   DWORD WINAPI CreateNtmsMediaPoolW(HANDLE hSession,LPCWSTR lpPoolName,LPNTMS_GUID lpMediaType,DWORD dwAction,LPSECURITY_ATTRIBUTES lpSecurityAttributes,LPNTMS_GUID lpPoolId);
    137   DWORD WINAPI GetNtmsMediaPoolNameA(HANDLE hSession,LPNTMS_GUID lpPoolId,LPSTR lpNameBuf,LPDWORD lpdwBufSize);
    138   DWORD WINAPI GetNtmsMediaPoolNameW(HANDLE hSession,LPNTMS_GUID lpPoolId,LPWSTR lpNameBuf,LPDWORD lpdwBufSize);
    139   DWORD WINAPI MoveToNtmsMediaPool(HANDLE hSession,LPNTMS_GUID lpMediaId,LPNTMS_GUID lpPoolId);
    140   DWORD WINAPI DeleteNtmsMediaPool(HANDLE hSession,LPNTMS_GUID lpPoolId);
    141   DWORD WINAPI DeleteNtmsLibrary(HANDLE hSession,LPNTMS_GUID lpLibraryId);
    142   DWORD WINAPI DeleteNtmsDrive(HANDLE hSession,LPNTMS_GUID lpDriveId);
    143 
    144 #define NTMS_OBJECTNAME_LENGTH 64
    145 #define NTMS_DESCRIPTION_LENGTH 127
    146 #define NTMS_DEVICENAME_LENGTH 64
    147 #define NTMS_SERIALNUMBER_LENGTH 32
    148 #define NTMS_REVISION_LENGTH 32
    149 #define NTMS_BARCODE_LENGTH 64
    150 #define NTMS_SEQUENCE_LENGTH 32
    151 #define NTMS_VENDORNAME_LENGTH 128
    152 #define NTMS_PRODUCTNAME_LENGTH 128
    153 #define NTMS_USERNAME_LENGTH 64
    154 #define NTMS_APPLICATIONNAME_LENGTH 64
    155 #define NTMS_COMPUTERNAME_LENGTH 64
    156 #define NTMS_I1_MESSAGE_LENGTH 127
    157 #define NTMS_MESSAGE_LENGTH 256
    158 #define NTMS_POOLHIERARCHY_LENGTH 512
    159 #define NTMS_OMIDLABELID_LENGTH 255
    160 #define NTMS_OMIDLABELTYPE_LENGTH 64
    161 #define NTMS_OMIDLABELINFO_LENGTH 256
    162 
    163 #ifndef NTMS_NOREDEF
    164 
    165   enum NtmsDriveState {
    166     NTMS_DRIVESTATE_DISMOUNTED = 0,NTMS_DRIVESTATE_MOUNTED = 1,NTMS_DRIVESTATE_LOADED = 2,NTMS_DRIVESTATE_UNLOADED = 5,
    167     NTMS_DRIVESTATE_BEING_CLEANED = 6,NTMS_DRIVESTATE_DISMOUNTABLE = 7
    168   };
    169 
    170 #define _NTMS_DRIVEINFORMATION __MINGW_NAME_AW(_NTMS_DRIVEINFORMATION)
    171 #define NTMS_DRIVEINFORMATION __MINGW_NAME_AW(NTMS_DRIVEINFORMATION)
    172 
    173   typedef struct _NTMS_DRIVEINFORMATIONA {
    174     DWORD Number;
    175     DWORD State;
    176     NTMS_GUID DriveType;
    177     CHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
    178     CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
    179     CHAR szRevision[NTMS_REVISION_LENGTH];
    180     WORD ScsiPort;
    181     WORD ScsiBus;
    182     WORD ScsiTarget;
    183     WORD ScsiLun;
    184     DWORD dwMountCount;
    185     SYSTEMTIME LastCleanedTs;
    186     NTMS_GUID SavedPartitionId;
    187     NTMS_GUID Library;
    188     GUID Reserved;
    189     DWORD dwDeferDismountDelay;
    190   } NTMS_DRIVEINFORMATIONA;
    191 
    192   typedef struct _NTMS_DRIVEINFORMATIONW {
    193     DWORD Number;
    194     DWORD State;
    195     NTMS_GUID DriveType;
    196     WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
    197     WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
    198     WCHAR szRevision[NTMS_REVISION_LENGTH];
    199     WORD ScsiPort;
    200     WORD ScsiBus;
    201     WORD ScsiTarget;
    202     WORD ScsiLun;
    203     DWORD dwMountCount;
    204     SYSTEMTIME LastCleanedTs;
    205     NTMS_GUID SavedPartitionId;
    206     NTMS_GUID Library;
    207     GUID Reserved;
    208     DWORD dwDeferDismountDelay;
    209   } NTMS_DRIVEINFORMATIONW;
    210 
    211   enum NtmsLibraryType {
    212     NTMS_LIBRARYTYPE_UNKNOWN = 0,NTMS_LIBRARYTYPE_OFFLINE = 1,NTMS_LIBRARYTYPE_ONLINE = 2,NTMS_LIBRARYTYPE_STANDALONE = 3
    213   };
    214 
    215   enum NtmsLibraryFlags {
    216     NTMS_LIBRARYFLAG_FIXEDOFFLINE = 0x01,NTMS_LIBRARYFLAG_CLEANERPRESENT = 0x02,NTMS_LIBRARYFLAG_AUTODETECTCHANGE = 0x04,
    217     NTMS_LIBRARYFLAG_IGNORECLEANERUSESREMAINING = 0x08,NTMS_LIBRARYFLAG_RECOGNIZECLEANERBARCODE = 0x10
    218   };
    219 
    220   enum NtmsInventoryMethod {
    221     NTMS_INVENTORY_NONE = 0,NTMS_INVENTORY_FAST = 1,NTMS_INVENTORY_OMID = 2,NTMS_INVENTORY_DEFAULT = 3,NTMS_INVENTORY_SLOT = 4,
    222     NTMS_INVENTORY_STOP = 5,NTMS_INVENTORY_MAX
    223   };
    224 
    225   typedef struct _NTMS_LIBRARYINFORMATION {
    226     DWORD LibraryType;
    227     NTMS_GUID CleanerSlot;
    228     NTMS_GUID CleanerSlotDefault;
    229     WINBOOL LibrarySupportsDriveCleaning;
    230     WINBOOL BarCodeReaderInstalled;
    231     DWORD InventoryMethod;
    232     DWORD dwCleanerUsesRemaining;
    233     DWORD FirstDriveNumber;
    234     DWORD dwNumberOfDrives;
    235     DWORD FirstSlotNumber;
    236     DWORD dwNumberOfSlots;
    237     DWORD FirstDoorNumber;
    238     DWORD dwNumberOfDoors;
    239     DWORD FirstPortNumber;
    240     DWORD dwNumberOfPorts;
    241     DWORD FirstChangerNumber;
    242     DWORD dwNumberOfChangers;
    243     DWORD dwNumberOfMedia;
    244     DWORD dwNumberOfMediaTypes;
    245     DWORD dwNumberOfLibRequests;
    246     GUID Reserved;
    247     WINBOOL AutoRecovery;
    248     DWORD dwFlags;
    249   } NTMS_LIBRARYINFORMATION;
    250 
    251 #define _NTMS_CHANGERINFORMATION __MINGW_NAME_AW(_NTMS_CHANGERINFORMATION)
    252 #define NTMS_CHANGERINFORMATION __MINGW_NAME_AW(NTMS_CHANGERINFORMATION)
    253 
    254   typedef struct _NTMS_CHANGERINFORMATIONA {
    255     DWORD Number;
    256     NTMS_GUID ChangerType;
    257     CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
    258     CHAR szRevision[NTMS_REVISION_LENGTH];
    259     CHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
    260     WORD ScsiPort;
    261     WORD ScsiBus;
    262     WORD ScsiTarget;
    263     WORD ScsiLun;
    264     NTMS_GUID Library;
    265   } NTMS_CHANGERINFORMATIONA;
    266 
    267   typedef struct _NTMS_CHANGERINFORMATIONW {
    268     DWORD Number;
    269     NTMS_GUID ChangerType;
    270     WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
    271     WCHAR szRevision[NTMS_REVISION_LENGTH];
    272     WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
    273     WORD ScsiPort;
    274     WORD ScsiBus;
    275     WORD ScsiTarget;
    276     WORD ScsiLun;
    277     NTMS_GUID Library;
    278   } NTMS_CHANGERINFORMATIONW;
    279 
    280   enum NtmsSlotState {
    281     NTMS_SLOTSTATE_UNKNOWN = 0,NTMS_SLOTSTATE_FULL = 1,NTMS_SLOTSTATE_EMPTY = 2,NTMS_SLOTSTATE_NOTPRESENT = 3,NTMS_SLOTSTATE_NEEDSINVENTORY = 4
    282   };
    283 
    284   typedef struct _NTMS_STORAGESLOTINFORMATION {
    285     DWORD Number;
    286     DWORD State;
    287     NTMS_GUID Library;
    288   } NTMS_STORAGESLOTINFORMATION;
    289 
    290   enum NtmsDoorState {
    291     NTMS_DOORSTATE_UNKNOWN = 0,NTMS_DOORSTATE_CLOSED = 1,NTMS_DOORSTATE_OPEN = 2
    292   };
    293 
    294   typedef struct _NTMS_IEDOORINFORMATION {
    295     DWORD Number;
    296     DWORD State;
    297     WORD MaxOpenSecs;
    298     NTMS_GUID Library;
    299   } NTMS_IEDOORINFORMATION;
    300 
    301   enum NtmsPortPosition {
    302     NTMS_PORTPOSITION_UNKNOWN = 0,NTMS_PORTPOSITION_EXTENDED = 1,NTMS_PORTPOSITION_RETRACTED = 2
    303   };
    304 
    305   enum NtmsPortContent {
    306     NTMS_PORTCONTENT_UNKNOWN = 0,NTMS_PORTCONTENT_FULL = 1,NTMS_PORTCONTENT_EMPTY = 2
    307   };
    308 
    309   typedef struct _NTMS_IEPORTINFORMATION {
    310     DWORD Number;
    311     DWORD Content;
    312     DWORD Position;
    313     WORD MaxExtendSecs;
    314     NTMS_GUID Library;
    315   } NTMS_IEPORTINFORMATION;
    316 
    317   enum NtmsBarCodeState {
    318     NTMS_BARCODESTATE_OK = 1,NTMS_BARCODESTATE_UNREADABLE = 2
    319   };
    320 
    321   enum NtmsMediaState {
    322     NTMS_MEDIASTATE_IDLE = 0,
    323     NTMS_MEDIASTATE_INUSE,NTMS_MEDIASTATE_MOUNTED,NTMS_MEDIASTATE_LOADED,NTMS_MEDIASTATE_UNLOADED,
    324     NTMS_MEDIASTATE_OPERROR,NTMS_MEDIASTATE_OPREQ
    325   };
    326 
    327 #define _NTMS_PMIDINFORMATION __MINGW_NAME_AW(_NTMS_PMIDINFORMATION)
    328 #define NTMS_PMIDINFORMATION __MINGW_NAME_AW(NTMS_PMIDINFORMATION)
    329 
    330   typedef struct _NTMS_PMIDINFORMATIONA {
    331     NTMS_GUID CurrentLibrary;
    332     NTMS_GUID MediaPool;
    333     NTMS_GUID Location;
    334     DWORD LocationType;
    335     NTMS_GUID MediaType;
    336     NTMS_GUID HomeSlot;
    337     CHAR szBarCode[NTMS_BARCODE_LENGTH];
    338     DWORD BarCodeState;
    339     CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH];
    340     DWORD MediaState;
    341     DWORD dwNumberOfPartitions;
    342     DWORD dwMediaTypeCode;
    343     DWORD dwDensityCode;
    344     NTMS_GUID MountedPartition;
    345   } NTMS_PMIDINFORMATIONA;
    346 
    347   typedef struct _NTMS_PMIDINFORMATIONW {
    348     NTMS_GUID CurrentLibrary;
    349     NTMS_GUID MediaPool;
    350     NTMS_GUID Location;
    351     DWORD LocationType;
    352     NTMS_GUID MediaType;
    353     NTMS_GUID HomeSlot;
    354     WCHAR szBarCode[NTMS_BARCODE_LENGTH];
    355     DWORD BarCodeState;
    356     WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH];
    357     DWORD MediaState;
    358     DWORD dwNumberOfPartitions;
    359     DWORD dwMediaTypeCode;
    360     DWORD dwDensityCode;
    361     NTMS_GUID MountedPartition;
    362   } NTMS_PMIDINFORMATIONW;
    363 
    364   typedef struct _NTMS_LMIDINFORMATION {
    365     NTMS_GUID MediaPool;
    366     DWORD dwNumberOfPartitions;
    367   } NTMS_LMIDINFORMATION;
    368 
    369   enum NtmsPartitionState {
    370     NTMS_PARTSTATE_UNKNOWN = 0,
    371     NTMS_PARTSTATE_UNPREPARED,NTMS_PARTSTATE_INCOMPATIBLE,NTMS_PARTSTATE_DECOMMISSIONED,
    372     NTMS_PARTSTATE_AVAILABLE,NTMS_PARTSTATE_ALLOCATED,NTMS_PARTSTATE_COMPLETE,NTMS_PARTSTATE_FOREIGN,NTMS_PARTSTATE_IMPORT,
    373     NTMS_PARTSTATE_RESERVED
    374   };
    375 
    376 #define NTMS_PARTSTATE_NEW NTMS_PARTSTATE_UNKNOWN
    377 
    378 #define _NTMS_PARTITIONINFORMATION __MINGW_NAME_AW(_NTMS_PARTITIONINFORMATION)
    379 #define NTMS_PARTITIONINFORMATION __MINGW_NAME_AW(NTMS_PARTITIONINFORMATION)
    380 
    381   typedef struct _NTMS_PARTITIONINFORMATIONA {
    382     NTMS_GUID PhysicalMedia;
    383     NTMS_GUID LogicalMedia;
    384     DWORD State;
    385     WORD Side;
    386     DWORD dwOmidLabelIdLength;
    387     BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH];
    388     CHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH];
    389     CHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH];
    390     DWORD dwMountCount;
    391     DWORD dwAllocateCount;
    392     LARGE_INTEGER Capacity;
    393   } NTMS_PARTITIONINFORMATIONA;
    394 
    395   typedef struct _NTMS_PARTITIONINFORMATIONW {
    396     NTMS_GUID PhysicalMedia;
    397     NTMS_GUID LogicalMedia;
    398     DWORD State;
    399     WORD Side;
    400     DWORD dwOmidLabelIdLength;
    401     BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH];
    402     WCHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH];
    403     WCHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH];
    404     DWORD dwMountCount;
    405     DWORD dwAllocateCount;
    406     LARGE_INTEGER Capacity;
    407   } NTMS_PARTITIONINFORMATIONW;
    408 
    409   enum NtmsPoolType {
    410     NTMS_POOLTYPE_UNKNOWN = 0,NTMS_POOLTYPE_SCRATCH = 1,NTMS_POOLTYPE_FOREIGN = 2,NTMS_POOLTYPE_IMPORT = 3,NTMS_POOLTYPE_APPLICATION = 1000
    411   };
    412 
    413   enum NtmsAllocationPolicy {
    414     NTMS_ALLOCATE_FROMSCRATCH = 1
    415   };
    416 
    417   enum NtmsDeallocationPolicy {
    418     NTMS_DEALLOCATE_TOSCRATCH = 1
    419   };
    420 
    421   typedef struct _NTMS_MEDIAPOOLINFORMATION {
    422     DWORD PoolType;
    423     NTMS_GUID MediaType;
    424     NTMS_GUID Parent;
    425     DWORD AllocationPolicy;
    426     DWORD DeallocationPolicy;
    427     DWORD dwMaxAllocates;
    428     DWORD dwNumberOfPhysicalMedia;
    429     DWORD dwNumberOfLogicalMedia;
    430     DWORD dwNumberOfMediaPools;
    431   } NTMS_MEDIAPOOLINFORMATION;
    432 
    433   enum NtmsReadWriteCharacteristics {
    434     NTMS_MEDIARW_UNKNOWN = 0,NTMS_MEDIARW_REWRITABLE = 1,NTMS_MEDIARW_WRITEONCE = 2,NTMS_MEDIARW_READONLY = 3
    435   };
    436 
    437   typedef struct _NTMS_MEDIATYPEINFORMATION {
    438     DWORD MediaType;
    439     DWORD NumberOfSides;
    440     DWORD ReadWriteCharacteristics;
    441     DWORD DeviceType;
    442   } NTMS_MEDIATYPEINFORMATION;
    443 
    444 #define _NTMS_DRIVETYPEINFORMATION __MINGW_NAME_AW(_NTMS_DRIVETYPEINFORMATION)
    445 #define NTMS_DRIVETYPEINFORMATION __MINGW_NAME_AW(NTMS_DRIVETYPEINFORMATION)
    446 
    447   typedef struct _NTMS_DRIVETYPEINFORMATIONA {
    448     CHAR szVendor[NTMS_VENDORNAME_LENGTH];
    449     CHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
    450     DWORD NumberOfHeads;
    451     DWORD DeviceType;
    452   } NTMS_DRIVETYPEINFORMATIONA;
    453 
    454   typedef struct _NTMS_DRIVETYPEINFORMATIONW {
    455     WCHAR szVendor[NTMS_VENDORNAME_LENGTH];
    456     WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
    457     DWORD NumberOfHeads;
    458     DWORD DeviceType;
    459   } NTMS_DRIVETYPEINFORMATIONW;
    460 
    461 #define _NTMS_CHANGERTYPEINFORMATION __MINGW_NAME_AW(_NTMS_CHANGERTYPEINFORMATION)
    462 #define NTMS_CHANGERTYPEINFORMATION __MINGW_NAME_AW(NTMS_CHANGERTYPEINFORMATION)
    463 
    464   typedef struct _NTMS_CHANGERTYPEINFORMATIONA {
    465     CHAR szVendor[NTMS_VENDORNAME_LENGTH];
    466     CHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
    467     DWORD DeviceType;
    468   } NTMS_CHANGERTYPEINFORMATIONA;
    469 
    470   typedef struct _NTMS_CHANGERTYPEINFORMATIONW {
    471     WCHAR szVendor[NTMS_VENDORNAME_LENGTH];
    472     WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
    473     DWORD DeviceType;
    474   } NTMS_CHANGERTYPEINFORMATIONW;
    475 
    476   enum NtmsLmOperation {
    477     NTMS_LM_REMOVE = 0,NTMS_LM_DISABLECHANGER = 1,NTMS_LM_DISABLELIBRARY = 1,NTMS_LM_ENABLECHANGER = 2,NTMS_LM_ENABLELIBRARY = 2,
    478     NTMS_LM_DISABLEDRIVE = 3,NTMS_LM_ENABLEDRIVE = 4,NTMS_LM_DISABLEMEDIA = 5,NTMS_LM_ENABLEMEDIA = 6,NTMS_LM_UPDATEOMID = 7,
    479     NTMS_LM_INVENTORY = 8,NTMS_LM_DOORACCESS = 9,NTMS_LM_EJECT = 10,NTMS_LM_EJECTCLEANER = 11,NTMS_LM_INJECT = 12,NTMS_LM_INJECTCLEANER = 13,
    480     NTMS_LM_PROCESSOMID = 14,NTMS_LM_CLEANDRIVE = 15,NTMS_LM_DISMOUNT = 16,NTMS_LM_MOUNT = 17,NTMS_LM_WRITESCRATCH = 18,NTMS_LM_CLASSIFY = 19,
    481     NTMS_LM_RESERVECLEANER = 20,NTMS_LM_RELEASECLEANER = 21,NTMS_LM_MAXWORKITEM
    482   };
    483 
    484   enum NtmsLmState {
    485     NTMS_LM_QUEUED = 0,NTMS_LM_INPROCESS = 1,NTMS_LM_PASSED = 2,NTMS_LM_FAILED = 3,NTMS_LM_INVALID = 4,NTMS_LM_WAITING = 5,
    486     NTMS_LM_DEFERRED = 6,NTMS_LM_DEFFERED = 6,NTMS_LM_CANCELLED = 7,NTMS_LM_STOPPED = 8
    487   };
    488 
    489 #define _NTMS_LIBREQUESTINFORMATION __MINGW_NAME_AW(_NTMS_LIBREQUESTINFORMATION)
    490 #define NTMS_LIBREQUESTINFORMATION __MINGW_NAME_AW(NTMS_LIBREQUESTINFORMATION)
    491 
    492   typedef struct _NTMS_LIBREQUESTINFORMATIONA {
    493     DWORD OperationCode;
    494     DWORD OperationOption;
    495     DWORD State;
    496     NTMS_GUID PartitionId;
    497     NTMS_GUID DriveId;
    498     NTMS_GUID PhysMediaId;
    499     NTMS_GUID Library;
    500     NTMS_GUID SlotId;
    501     SYSTEMTIME TimeQueued;
    502     SYSTEMTIME TimeCompleted;
    503     CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    504     CHAR szUser[NTMS_USERNAME_LENGTH];
    505     CHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    506     DWORD dwErrorCode;
    507     NTMS_GUID WorkItemId;
    508     DWORD dwPriority;
    509   } NTMS_LIBREQUESTINFORMATIONA;
    510 
    511   typedef struct _NTMS_LIBREQUESTINFORMATIONW {
    512     DWORD OperationCode;
    513     DWORD OperationOption;
    514     DWORD State;
    515     NTMS_GUID PartitionId;
    516     NTMS_GUID DriveId;
    517     NTMS_GUID PhysMediaId;
    518     NTMS_GUID Library;
    519     NTMS_GUID SlotId;
    520     SYSTEMTIME TimeQueued;
    521     SYSTEMTIME TimeCompleted;
    522     WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    523     WCHAR szUser[NTMS_USERNAME_LENGTH];
    524     WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    525     DWORD dwErrorCode;
    526     NTMS_GUID WorkItemId;
    527     DWORD dwPriority;
    528   } NTMS_LIBREQUESTINFORMATIONW;
    529 
    530   enum NtmsOpreqCommand {
    531     NTMS_OPREQ_UNKNOWN = 0,NTMS_OPREQ_NEWMEDIA,NTMS_OPREQ_CLEANER,NTMS_OPREQ_DEVICESERVICE,NTMS_OPREQ_MOVEMEDIA,
    532     NTMS_OPREQ_MESSAGE
    533   };
    534 
    535   enum NtmsOpreqState {
    536     NTMS_OPSTATE_UNKNOWN = 0,
    537     NTMS_OPSTATE_SUBMITTED,NTMS_OPSTATE_ACTIVE,NTMS_OPSTATE_INPROGRESS,NTMS_OPSTATE_REFUSED,
    538     NTMS_OPSTATE_COMPLETE
    539   };
    540 
    541 #define _NTMS_OPREQUESTINFORMATION __MINGW_NAME_AW(_NTMS_OPREQUESTINFORMATION)
    542 #define NTMS_OPREQUESTINFORMATION __MINGW_NAME_AW(NTMS_OPREQUESTINFORMATION)
    543 
    544   typedef struct _NTMS_OPREQUESTINFORMATIONA {
    545     DWORD Request;
    546     SYSTEMTIME Submitted;
    547     DWORD State;
    548     CHAR szMessage[NTMS_MESSAGE_LENGTH];
    549     DWORD Arg1Type;
    550     NTMS_GUID Arg1;
    551     DWORD Arg2Type;
    552     NTMS_GUID Arg2;
    553     CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    554     CHAR szUser[NTMS_USERNAME_LENGTH];
    555     CHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    556   } NTMS_OPREQUESTINFORMATIONA;
    557 
    558   typedef struct _NTMS_OPREQUESTINFORMATIONW {
    559     DWORD Request;
    560     SYSTEMTIME Submitted;
    561     DWORD State;
    562     WCHAR szMessage[NTMS_MESSAGE_LENGTH];
    563     DWORD Arg1Type;
    564     NTMS_GUID Arg1;
    565     DWORD Arg2Type;
    566     NTMS_GUID Arg2;
    567     WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    568     WCHAR szUser[NTMS_USERNAME_LENGTH];
    569     WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    570   } NTMS_OPREQUESTINFORMATIONW;
    571 
    572   typedef struct _NTMS_COMPUTERINFORMATION {
    573     DWORD dwLibRequestPurgeTime;
    574     DWORD dwOpRequestPurgeTime;
    575     DWORD dwLibRequestFlags;
    576     DWORD dwOpRequestFlags;
    577     DWORD dwMediaPoolPolicy;
    578   } NTMS_COMPUTERINFORMATION;
    579 
    580   enum NtmsLibRequestFlags {
    581     NTMS_LIBREQFLAGS_NOAUTOPURGE = 0x01,NTMS_LIBREQFLAGS_NOFAILEDPURGE = 0x02
    582   };
    583 
    584   enum NtmsOpRequestFlags {
    585     NTMS_OPREQFLAGS_NOAUTOPURGE = 0x01,NTMS_OPREQFLAGS_NOFAILEDPURGE = 0x02,NTMS_OPREQFLAGS_NOALERTS = 0x10,NTMS_OPREQFLAGS_NOTRAYICON = 0x20
    586   };
    587 
    588   enum NtmsMediaPoolPolicy {
    589     NTMS_POOLPOLICY_PURGEOFFLINESCRATCH = 0x01,NTMS_POOLPOLICY_KEEPOFFLINEIMPORT = 0x02
    590   };
    591 
    592 #define _NTMS_OBJECTINFORMATION __MINGW_NAME_AW(_NTMS_OBJECTINFORMATION)
    593 #define NTMS_OBJECTINFORMATION __MINGW_NAME_AW(NTMS_OBJECTINFORMATION)
    594 #define LPNTMS_OBJECTINFORMATION __MINGW_NAME_AW(LPNTMS_OBJECTINFORMATION)
    595 
    596   enum NtmsOperationalState {
    597     NTMS_READY = 0,
    598     NTMS_INITIALIZING = 10,
    599     NTMS_NEEDS_SERVICE = 20,
    600     NTMS_NOT_PRESENT = 21
    601   };
    602 
    603   typedef struct _RSM_MESSAGE {
    604       LPGUID lpguidOperation;
    605       DWORD dwNtmsType;
    606       DWORD dwState;
    607       DWORD dwFlags;
    608       DWORD dwPriority;
    609       DWORD dwErrorCode;
    610       LPWSTR lpszComputerName;
    611       LPWSTR lpszApplication;
    612       LPWSTR lpszUser;
    613       LPWSTR lpszTimeSubmitted;
    614       LPWSTR lpszMessage;
    615   } RSM_MESSAGE, *LPRSM_MESSAGE;
    616 
    617   typedef struct _NTMS_OBJECTINFORMATIONA {
    618     DWORD dwSize;
    619     DWORD dwType;
    620     SYSTEMTIME Created;
    621     SYSTEMTIME Modified;
    622     NTMS_GUID ObjectGuid;
    623     WINBOOL Enabled;
    624     DWORD dwOperationalState;
    625     CHAR szName[NTMS_OBJECTNAME_LENGTH];
    626     CHAR szDescription[NTMS_DESCRIPTION_LENGTH];
    627     union {
    628       NTMS_DRIVEINFORMATIONA Drive;
    629       NTMS_DRIVETYPEINFORMATIONA DriveType;
    630       NTMS_LIBRARYINFORMATION Library;
    631       NTMS_CHANGERINFORMATIONA Changer;
    632       NTMS_CHANGERTYPEINFORMATIONA ChangerType;
    633       NTMS_STORAGESLOTINFORMATION StorageSlot;
    634       NTMS_IEDOORINFORMATION IEDoor;
    635       NTMS_IEPORTINFORMATION IEPort;
    636       NTMS_PMIDINFORMATIONA PhysicalMedia;
    637       NTMS_LMIDINFORMATION LogicalMedia;
    638       NTMS_PARTITIONINFORMATIONA Partition;
    639       NTMS_MEDIAPOOLINFORMATION MediaPool;
    640       NTMS_MEDIATYPEINFORMATION MediaType;
    641       NTMS_LIBREQUESTINFORMATIONA LibRequest;
    642       NTMS_OPREQUESTINFORMATIONA OpRequest;
    643       NTMS_COMPUTERINFORMATION Computer;
    644     } Info;
    645   } NTMS_OBJECTINFORMATIONA,*LPNTMS_OBJECTINFORMATIONA;
    646 
    647   typedef struct _NTMS_OBJECTINFORMATIONW {
    648     DWORD dwSize;
    649     DWORD dwType;
    650     SYSTEMTIME Created;
    651     SYSTEMTIME Modified;
    652     NTMS_GUID ObjectGuid;
    653     WINBOOL Enabled;
    654     DWORD dwOperationalState;
    655     WCHAR szName[NTMS_OBJECTNAME_LENGTH];
    656     WCHAR szDescription[NTMS_DESCRIPTION_LENGTH];
    657     union {
    658       NTMS_DRIVEINFORMATIONW Drive;
    659       NTMS_DRIVETYPEINFORMATIONW DriveType;
    660       NTMS_LIBRARYINFORMATION Library;
    661       NTMS_CHANGERINFORMATIONW Changer;
    662       NTMS_CHANGERTYPEINFORMATIONW ChangerType;
    663       NTMS_STORAGESLOTINFORMATION StorageSlot;
    664       NTMS_IEDOORINFORMATION IEDoor;
    665       NTMS_IEPORTINFORMATION IEPort;
    666       NTMS_PMIDINFORMATIONW PhysicalMedia;
    667       NTMS_LMIDINFORMATION LogicalMedia;
    668       NTMS_PARTITIONINFORMATIONW Partition;
    669       NTMS_MEDIAPOOLINFORMATION MediaPool;
    670       NTMS_MEDIATYPEINFORMATION MediaType;
    671       NTMS_LIBREQUESTINFORMATIONW LibRequest;
    672       NTMS_OPREQUESTINFORMATIONW OpRequest;
    673       NTMS_COMPUTERINFORMATION Computer;
    674     } Info;
    675   } NTMS_OBJECTINFORMATIONW,*LPNTMS_OBJECTINFORMATIONW;
    676 
    677 #define NTMS_I1_LIBREQUESTINFORMATION __MINGW_NAME_AW(NTMS_I1_LIBREQUESTINFORMATION)
    678 #define NTMS_I1_PARTITIONINFORMATION __MINGW_NAME_AW(NTMS_I1_PARTITIONINFORMATION)
    679 #define NTMS_I1_PMIDINFORMATION __MINGW_NAME_AW(NTMS_I1_PMIDINFORMATION)
    680 #define NTMS_I1_OPREQUESTINFORMATION __MINGW_NAME_AW(NTMS_I1_OPREQUESTINFORMATION)
    681 #define NTMS_I1_OBJECTINFORMATION __MINGW_NAME_AW(NTMS_I1_OBJECTINFORMATION)
    682 
    683   typedef struct _NTMS_I1_LIBRARYINFORMATION {
    684     DWORD LibraryType;
    685     NTMS_GUID CleanerSlot;
    686     NTMS_GUID CleanerSlotDefault;
    687     WINBOOL LibrarySupportsDriveCleaning;
    688     WINBOOL BarCodeReaderInstalled;
    689     DWORD InventoryMethod;
    690     DWORD dwCleanerUsesRemaining;
    691     DWORD FirstDriveNumber;
    692     DWORD dwNumberOfDrives;
    693     DWORD FirstSlotNumber;
    694     DWORD dwNumberOfSlots;
    695     DWORD FirstDoorNumber;
    696     DWORD dwNumberOfDoors;
    697     DWORD FirstPortNumber;
    698     DWORD dwNumberOfPorts;
    699     DWORD FirstChangerNumber;
    700     DWORD dwNumberOfChangers;
    701     DWORD dwNumberOfMedia;
    702     DWORD dwNumberOfMediaTypes;
    703     DWORD dwNumberOfLibRequests;
    704     GUID Reserved;
    705   } NTMS_I1_LIBRARYINFORMATION;
    706 
    707   typedef struct _NTMS_I1_LIBREQUESTINFORMATIONA {
    708     DWORD OperationCode;
    709     DWORD OperationOption;
    710     DWORD State;
    711     NTMS_GUID PartitionId;
    712     NTMS_GUID DriveId;
    713     NTMS_GUID PhysMediaId;
    714     NTMS_GUID Library;
    715     NTMS_GUID SlotId;
    716     SYSTEMTIME TimeQueued;
    717     SYSTEMTIME TimeCompleted;
    718     CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    719     CHAR szUser[NTMS_USERNAME_LENGTH];
    720     CHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    721   } NTMS_I1_LIBREQUESTINFORMATIONA;
    722 
    723   typedef struct _NTMS_I1_LIBREQUESTINFORMATIONW {
    724     DWORD OperationCode;
    725     DWORD OperationOption;
    726     DWORD State;
    727     NTMS_GUID PartitionId;
    728     NTMS_GUID DriveId;
    729     NTMS_GUID PhysMediaId;
    730     NTMS_GUID Library;
    731     NTMS_GUID SlotId;
    732     SYSTEMTIME TimeQueued;
    733     SYSTEMTIME TimeCompleted;
    734     WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    735     WCHAR szUser[NTMS_USERNAME_LENGTH];
    736     WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    737   } NTMS_I1_LIBREQUESTINFORMATIONW;
    738 
    739   typedef struct _NTMS_I1_PMIDINFORMATIONA {
    740     NTMS_GUID CurrentLibrary;
    741     NTMS_GUID MediaPool;
    742     NTMS_GUID Location;
    743     DWORD LocationType;
    744     NTMS_GUID MediaType;
    745     NTMS_GUID HomeSlot;
    746     CHAR szBarCode[NTMS_BARCODE_LENGTH];
    747     DWORD BarCodeState;
    748     CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH];
    749     DWORD MediaState;
    750     DWORD dwNumberOfPartitions;
    751   } NTMS_I1_PMIDINFORMATIONA;
    752 
    753   typedef struct _NTMS_I1_PMIDINFORMATIONW {
    754     NTMS_GUID CurrentLibrary;
    755     NTMS_GUID MediaPool;
    756     NTMS_GUID Location;
    757     DWORD LocationType;
    758     NTMS_GUID MediaType;
    759     NTMS_GUID HomeSlot;
    760     WCHAR szBarCode[NTMS_BARCODE_LENGTH];
    761     DWORD BarCodeState;
    762     WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH];
    763     DWORD MediaState;
    764     DWORD dwNumberOfPartitions;
    765   } NTMS_I1_PMIDINFORMATIONW;
    766 
    767   typedef struct _NTMS_I1_PARTITIONINFORMATIONA {
    768     NTMS_GUID PhysicalMedia;
    769     NTMS_GUID LogicalMedia;
    770     DWORD State;
    771     WORD Side;
    772     DWORD dwOmidLabelIdLength;
    773     BYTE OmidLabelId[255];
    774     CHAR szOmidLabelType[64];
    775     CHAR szOmidLabelInfo[256];
    776     DWORD dwMountCount;
    777     DWORD dwAllocateCount;
    778   } NTMS_I1_PARTITIONINFORMATIONA;
    779 
    780   typedef struct _NTMS_I1_PARTITIONINFORMATIONW {
    781     NTMS_GUID PhysicalMedia;
    782     NTMS_GUID LogicalMedia;
    783     DWORD State;
    784     WORD Side;
    785     DWORD dwOmidLabelIdLength;
    786     BYTE OmidLabelId[255];
    787     WCHAR szOmidLabelType[64];
    788     WCHAR szOmidLabelInfo[256];
    789     DWORD dwMountCount;
    790     DWORD dwAllocateCount;
    791   } NTMS_I1_PARTITIONINFORMATIONW;
    792 
    793   typedef struct _NTMS_I1_OPREQUESTINFORMATIONA {
    794     DWORD Request;
    795     SYSTEMTIME Submitted;
    796     DWORD State;
    797     CHAR szMessage[NTMS_I1_MESSAGE_LENGTH];
    798     DWORD Arg1Type;
    799     NTMS_GUID Arg1;
    800     DWORD Arg2Type;
    801     NTMS_GUID Arg2;
    802     CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    803     CHAR szUser[NTMS_USERNAME_LENGTH];
    804     CHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    805   } NTMS_I1_OPREQUESTINFORMATIONA;
    806 
    807   typedef struct _NTMS_I1_OPREQUESTINFORMATIONW {
    808     DWORD Request;
    809     SYSTEMTIME Submitted;
    810     DWORD State;
    811     WCHAR szMessage[NTMS_I1_MESSAGE_LENGTH];
    812     DWORD Arg1Type;
    813     NTMS_GUID Arg1;
    814     DWORD Arg2Type;
    815     NTMS_GUID Arg2;
    816     WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
    817     WCHAR szUser[NTMS_USERNAME_LENGTH];
    818     WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
    819   } NTMS_I1_OPREQUESTINFORMATIONW;
    820 
    821   typedef struct _NTMS_I1_OBJECTINFORMATIONA {
    822     DWORD dwSize;
    823     DWORD dwType;
    824     SYSTEMTIME Created;
    825     SYSTEMTIME Modified;
    826     NTMS_GUID ObjectGuid;
    827     WINBOOL Enabled;
    828     DWORD dwOperationalState;
    829     CHAR szName[NTMS_OBJECTNAME_LENGTH];
    830     CHAR szDescription[NTMS_DESCRIPTION_LENGTH];
    831     union {
    832       NTMS_DRIVEINFORMATIONA Drive;
    833       NTMS_DRIVETYPEINFORMATIONA DriveType;
    834       NTMS_I1_LIBRARYINFORMATION Library;
    835       NTMS_CHANGERINFORMATIONA Changer;
    836       NTMS_CHANGERTYPEINFORMATIONA ChangerType;
    837       NTMS_STORAGESLOTINFORMATION StorageSlot;
    838       NTMS_IEDOORINFORMATION IEDoor;
    839       NTMS_IEPORTINFORMATION IEPort;
    840       NTMS_I1_PMIDINFORMATIONA PhysicalMedia;
    841       NTMS_LMIDINFORMATION LogicalMedia;
    842       NTMS_I1_PARTITIONINFORMATIONA Partition;
    843       NTMS_MEDIAPOOLINFORMATION MediaPool;
    844       NTMS_MEDIATYPEINFORMATION MediaType;
    845       NTMS_I1_LIBREQUESTINFORMATIONA LibRequest;
    846       NTMS_I1_OPREQUESTINFORMATIONA OpRequest;
    847     } Info;
    848   } NTMS_I1_OBJECTINFORMATIONA,*LPNTMS_I1_OBJECTINFORMATIONA;
    849 
    850   typedef struct _NTMS_I1_OBJECTINFORMATIONW {
    851     DWORD dwSize;
    852     DWORD dwType;
    853     SYSTEMTIME Created;
    854     SYSTEMTIME Modified;
    855     NTMS_GUID ObjectGuid;
    856     WINBOOL Enabled;
    857     DWORD dwOperationalState;
    858     WCHAR szName[NTMS_OBJECTNAME_LENGTH];
    859     WCHAR szDescription[NTMS_DESCRIPTION_LENGTH];
    860     union {
    861       NTMS_DRIVEINFORMATIONW Drive;
    862       NTMS_DRIVETYPEINFORMATIONW DriveType;
    863       NTMS_I1_LIBRARYINFORMATION Library;
    864       NTMS_CHANGERINFORMATIONW Changer;
    865       NTMS_CHANGERTYPEINFORMATIONW ChangerType;
    866       NTMS_STORAGESLOTINFORMATION StorageSlot;
    867       NTMS_IEDOORINFORMATION IEDoor;
    868       NTMS_IEPORTINFORMATION IEPort;
    869       NTMS_I1_PMIDINFORMATIONW PhysicalMedia;
    870       NTMS_LMIDINFORMATION LogicalMedia;
    871       NTMS_I1_PARTITIONINFORMATIONW Partition;
    872       NTMS_MEDIAPOOLINFORMATION MediaPool;
    873       NTMS_MEDIATYPEINFORMATION MediaType;
    874       NTMS_I1_LIBREQUESTINFORMATIONW LibRequest;
    875       NTMS_I1_OPREQUESTINFORMATIONW OpRequest;
    876     } Info;
    877   } NTMS_I1_OBJECTINFORMATIONW,*LPNTMS_I1_OBJECTINFORMATIONW;
    878 #endif
    879 
    880 #ifndef NTMS_NOREDEF
    881 
    882   enum NtmsCreateNtmsMediaOptions {
    883     NTMS_ERROR_ON_DUPLICATE = 0x0001
    884   };
    885 #endif
    886 
    887 #ifdef PRE_SEVIL
    888   DWORD WINAPI GetNtmsObjectInformation(HANDLE hSession,LPNTMS_GUID lpObjectId,LPNTMS_OBJECTINFORMATION lpInfo);
    889   DWORD WINAPI SetNtmsObjectInformation(HANDLE hSession,LPNTMS_GUID lpObjectId,LPNTMS_OBJECTINFORMATION lpInfo);
    890 #endif
    891   DWORD WINAPI GetNtmsObjectInformationA(HANDLE hSession,LPNTMS_GUID lpObjectId,LPNTMS_OBJECTINFORMATIONA lpInfo);
    892   DWORD WINAPI GetNtmsObjectInformationW(HANDLE hSession,LPNTMS_GUID lpObjectId,LPNTMS_OBJECTINFORMATIONW lpInfo);
    893   DWORD WINAPI SetNtmsObjectInformationA(HANDLE hSession,LPNTMS_GUID lpObjectId,LPNTMS_OBJECTINFORMATIONA lpInfo);
    894   DWORD WINAPI SetNtmsObjectInformationW(HANDLE hSession,LPNTMS_GUID lpObjectId,LPNTMS_OBJECTINFORMATIONW lpInfo);
    895   DWORD WINAPI CreateNtmsMediaA(HANDLE hSession,LPNTMS_OBJECTINFORMATIONA lpMedia,LPNTMS_OBJECTINFORMATIONA lpList,DWORD dwOptions);
    896   DWORD WINAPI CreateNtmsMediaW(HANDLE hSession,LPNTMS_OBJECTINFORMATIONW lpMedia,LPNTMS_OBJECTINFORMATIONW lpList,DWORD dwOptions);
    897   enum NtmsEnumerateOption {
    898     NTMS_ENUM_DEFAULT = 0,NTMS_ENUM_ROOTPOOL = 1
    899   };
    900   DWORD WINAPI EnumerateNtmsObject(HANDLE hSession,const LPNTMS_GUID lpContainerId,LPNTMS_GUID lpList,LPDWORD lpdwListSize,DWORD dwType,DWORD dwOptions);
    901   DWORD WINAPI DisableNtmsObject(HANDLE hSession,DWORD dwType,LPNTMS_GUID lpObjectId);
    902   DWORD WINAPI EnableNtmsObject(HANDLE hSession,DWORD dwType,LPNTMS_GUID lpObjectId);
    903   enum NtmsEjectOperation {
    904     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
    905   };
    906   DWORD WINAPI EjectNtmsMedia(HANDLE hSession,LPNTMS_GUID lpMediaId,LPNTMS_GUID lpEjectOperation,DWORD dwAction);
    907   enum NtmsInjectOperation {
    908     NTMS_INJECT_START = 0,NTMS_INJECT_STOP = 1,NTMS_INJECT_RETRACT = 2,NTMS_INJECT_STARTMANY = 3
    909   };
    910   DWORD WINAPI InjectNtmsMedia(HANDLE hSession,LPNTMS_GUID lpLibraryId,LPNTMS_GUID lpInjectOperation,DWORD dwAction);
    911   DWORD WINAPI AccessNtmsLibraryDoor(HANDLE hSession,LPNTMS_GUID lpLibraryId,DWORD dwAction);
    912   DWORD WINAPI CleanNtmsDrive(HANDLE hSession,LPNTMS_GUID lpDriveId);
    913   DWORD WINAPI DismountNtmsDrive(HANDLE hSession,LPNTMS_GUID lpDriveId);
    914   DWORD WINAPI InventoryNtmsLibrary(HANDLE hSession,LPNTMS_GUID lpLibraryId,DWORD dwAction);
    915   DWORD WINAPI IdentifyNtmsSlot(HANDLE hSession,LPNTMS_GUID lpSlotId,DWORD dwOption);
    916 
    917 #define NTMS_OMID_TYPE_RAW_LABEL 0x01
    918 #define NTMS_OMID_TYPE_FILESYSTEM_INFO 0x02
    919 
    920   typedef struct {
    921     WCHAR FileSystemType[64];
    922     WCHAR VolumeName[256];
    923     DWORD SerialNumber;
    924   } NTMS_FILESYSTEM_INFO;
    925 
    926   DWORD WINAPI UpdateNtmsOmidInfo(HANDLE hSession,LPNTMS_GUID lpMediaId,DWORD labelType,DWORD numberOfBytes,LPVOID lpBuffer);
    927   DWORD WINAPI CancelNtmsLibraryRequest(HANDLE hSession,LPNTMS_GUID lpRequestId);
    928   DWORD WINAPI GetNtmsRequestOrder(HANDLE hSession,LPNTMS_GUID lpRequestId,LPDWORD lpdwOrderNumber);
    929   DWORD WINAPI SetNtmsRequestOrder(HANDLE hSession,LPNTMS_GUID lpRequestId,DWORD dwOrderNumber);
    930   DWORD WINAPI DeleteNtmsRequests(HANDLE hSession,LPNTMS_GUID lpRequestId,DWORD dwType,DWORD dwCount);
    931   DWORD WINAPI ReserveNtmsCleanerSlot (HANDLE hSession,LPNTMS_GUID lpLibrary,LPNTMS_GUID lpSlot);
    932   DWORD WINAPI ReleaseNtmsCleanerSlot (HANDLE hSession,LPNTMS_GUID lpLibrary);
    933   DWORD WINAPI InjectNtmsCleaner (HANDLE hSession,LPNTMS_GUID lpLibrary,LPNTMS_GUID lpInjectOperation,DWORD dwNumberOfCleansLeft,DWORD dwAction);
    934   DWORD WINAPI EjectNtmsCleaner (HANDLE hSession,LPNTMS_GUID lpLibrary,LPNTMS_GUID lpEjectOperation,DWORD dwAction);
    935   DWORD WINAPI BeginNtmsDeviceChangeDetection(HANDLE hSession,LPHANDLE lpDetectHandle);
    936   DWORD WINAPI SetNtmsDeviceChangeDetection(HANDLE hSession,HANDLE DetectHandle,LPNTMS_GUID lpRequestId,DWORD dwType,DWORD dwCount);
    937   DWORD WINAPI EndNtmsDeviceChangeDetection(HANDLE hSession,HANDLE DetectHandle);
    938 
    939 #ifndef NTMS_NOREDEF
    940   enum NtmsDriveType {
    941     NTMS_UNKNOWN_DRIVE = 0
    942   };
    943 #endif
    944 
    945   DWORD WINAPI GetNtmsObjectSecurity(HANDLE hSession,LPNTMS_GUID lpObjectId,DWORD dwType,SECURITY_INFORMATION RequestedInformation,PSECURITY_DESCRIPTOR lpSecurityDescriptor,DWORD nLength,LPDWORD lpnLengthNeeded);
    946   DWORD WINAPI SetNtmsObjectSecurity(HANDLE hSession,LPNTMS_GUID lpObjectId,DWORD dwType,SECURITY_INFORMATION SecurityInformation,PSECURITY_DESCRIPTOR lpSecurityDescriptor);
    947   enum NtmsAccessMask {
    948     NTMS_USE_ACCESS = 0x1,
    949     NTMS_MODIFY_ACCESS = 0x2,
    950     NTMS_CONTROL_ACCESS = 0x4 /* Hmm, could be 3, too. */
    951   };
    952 
    953 #define NTMS_GENERIC_READ NTMS_USE_ACCESS
    954 #define NTMS_GENERIC_WRITE NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS
    955 #define NTMS_GENERIC_EXECUTE NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS
    956 #define NTMS_GENERIC_ALL NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS
    957 
    958 #define NTMS_MAXATTR_LENGTH 0x10000
    959 #define NTMS_MAXATTR_NAMELEN 32
    960 
    961   DWORD WINAPI GetNtmsObjectAttributeA(HANDLE hSession,LPNTMS_GUID lpObjectId,DWORD dwType,LPCSTR lpAttributeName,LPVOID lpAttributeData,LPDWORD lpAttributeSize);
    962   DWORD WINAPI GetNtmsObjectAttributeW(HANDLE hSession,LPNTMS_GUID lpObjectId,DWORD dwType,LPCWSTR lpAttributeName,LPVOID lpAttributeData,LPDWORD lpAttributeSize);
    963   DWORD WINAPI SetNtmsObjectAttributeA(HANDLE hSession,LPNTMS_GUID lpObjectId,DWORD dwType,LPCSTR lpAttributeName,LPVOID lpAttributeData,DWORD dwAttributeSize);
    964   DWORD WINAPI SetNtmsObjectAttributeW(HANDLE hSession,LPNTMS_GUID lpObjectId,DWORD dwType,LPCWSTR lpAttributeName,LPVOID lpAttributeData,DWORD AttributeSize);
    965 
    966   enum NtmsUITypes {
    967     NTMS_UITYPE_INVALID = 0,
    968     NTMS_UITYPE_INFO,NTMS_UITYPE_REQ,NTMS_UITYPE_ERR,NTMS_UITYPE_MAX
    969   };
    970 
    971   enum NtmsUIOperations {
    972     NTMS_UIDEST_ADD = 1,
    973     NTMS_UIDEST_DELETE,NTMS_UIDEST_DELETEALL,
    974     NTMS_UIOPERATION_MAX
    975   };
    976 
    977   DWORD WINAPI GetNtmsUIOptionsA(HANDLE hSession,const LPNTMS_GUID lpObjectId,DWORD dwType,LPSTR lpszDestination,LPDWORD lpdwBufSize);
    978   DWORD WINAPI GetNtmsUIOptionsW(HANDLE hSession,const LPNTMS_GUID lpObjectId,DWORD dwType,LPWSTR lpszDestination,LPDWORD lpdwBufSize);
    979   DWORD WINAPI SetNtmsUIOptionsA(HANDLE hSession,const LPNTMS_GUID lpObjectId,DWORD dwType,DWORD dwOperation,LPCSTR lpszDestination);
    980   DWORD WINAPI SetNtmsUIOptionsW(HANDLE hSession,const LPNTMS_GUID lpObjectId,DWORD dwType,DWORD dwOperation,LPCWSTR lpszDestination);
    981   DWORD WINAPI SubmitNtmsOperatorRequestW(HANDLE hSession,DWORD dwRequest,LPCWSTR lpMessage,LPNTMS_GUID lpArg1Id,LPNTMS_GUID lpArg2Id,LPNTMS_GUID lpRequestId);
    982   DWORD WINAPI SubmitNtmsOperatorRequestA(HANDLE hSession,DWORD dwRequest,LPCSTR lpMessage,LPNTMS_GUID lpArg1Id,LPNTMS_GUID lpArg2Id,LPNTMS_GUID lpRequestId);
    983   DWORD WINAPI WaitForNtmsOperatorRequest(HANDLE hSession,LPNTMS_GUID lpRequestId,DWORD dwTimeout);
    984   DWORD WINAPI CancelNtmsOperatorRequest(HANDLE hSession,LPNTMS_GUID lpRequestId);
    985   DWORD WINAPI SatisfyNtmsOperatorRequest(HANDLE hSession,LPNTMS_GUID lpRequestId);
    986 
    987 #ifndef NTMS_NOREDEF
    988   enum NtmsNotificationOperations {
    989     NTMS_OBJ_UPDATE = 1,
    990     NTMS_OBJ_INSERT,NTMS_OBJ_DELETE,NTMS_EVENT_SIGNAL,NTMS_EVENT_COMPLETE
    991   };
    992 
    993   typedef struct _NTMS_NOTIFICATIONINFORMATION {
    994     DWORD dwOperation;
    995     NTMS_GUID ObjectId;
    996   } NTMS_NOTIFICATIONINFORMATION,*LPNTMS_NOTIFICATIONINFORMATION;
    997 #endif
    998 
    999   DWORD WINAPI ImportNtmsDatabase(HANDLE hSession);
   1000   DWORD WINAPI ExportNtmsDatabase(HANDLE hSession);
   1001   DWORD WINAPI ImportNtmsDatabase(HANDLE hSession);
   1002   DWORD WINAPI ExportNtmsDatabase(HANDLE hSession);
   1003   HANDLE WINAPI OpenNtmsNotification(HANDLE hSession,DWORD dwType);
   1004   DWORD WINAPI WaitForNtmsNotification(HANDLE hNotification,LPNTMS_NOTIFICATIONINFORMATION lpNotificationInformation,DWORD dwTimeout);
   1005   DWORD WINAPI CloseNtmsNotification(HANDLE hNotification);
   1006   DWORD WINAPI EjectDiskFromSADriveW(LPCWSTR lpComputerName,LPCWSTR lpAppName,LPCWSTR lpDeviceName,HWND hWnd,LPCWSTR lpTitle,LPCWSTR lpMessage,DWORD dwOptions);
   1007   DWORD WINAPI EjectDiskFromSADriveA(LPCSTR lpComputerName,LPCSTR lpAppName,LPCSTR lpDeviceName,HWND hWnd,LPCSTR lpTitle,LPCSTR lpMessage,DWORD dwOptions);
   1008   DWORD WINAPI GetVolumesFromDriveW(LPWSTR pszDriveName,LPWSTR *VolumeNameBufferPtr,LPWSTR *DriveLetterBufferPtr);
   1009   DWORD WINAPI GetVolumesFromDriveA(LPSTR pszDriveName,LPSTR *VolumeNameBufferPtr,LPSTR *DriveLetterBufferPtr);
   1010 
   1011 #ifdef __cplusplus
   1012 }
   1013 #endif
   1014 
   1015 #pragma pack()
   1016 #endif
   1017