master
   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
  14extern "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