diff fuhtark_test/include/winapi/ntmsapi.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fuhtark_test/include/winapi/ntmsapi.h	Wed Nov 26 21:36:48 2025 +0700
@@ -0,0 +1,1053 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INCL_NTMSAPI_H_
+#define _INCL_NTMSAPI_H_
+
+#pragma pack(8)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  typedef GUID NTMS_GUID;
+  typedef GUID *LPNTMS_GUID;
+
+#define NTMS_NULLGUID {0,0,0,{0,0,0,0,0,0,0,0}}
+#define NTMS_IS_NULLGUID(id) ((id.Data1==0)&&(id.Data2==0)&&(id.Data3==0)&& (id.Data4[0]==0)&&(id.Data4[1]==0)&&(id.Data4[2]==0)&& (id.Data4[3]==0)&&(id.Data4[4]==0)&&(id.Data4[5]==0)&& (id.Data4[6]==0)&&(id.Data4[7]==0))
+
+#ifdef UNICODE
+#define OpenNtmsSession OpenNtmsSessionW
+#define GetNtmsDeviceName GetNtmsDeviceNameW
+#define GetNtmsObjectInformation GetNtmsObjectInformationW
+#define SetNtmsObjectInformation SetNtmsObjectInformationW
+#define CreateNtmsMediaPool CreateNtmsMediaPoolW
+#define GetNtmsMediaPoolName GetNtmsMediaPoolNameW
+#define GetNtmsObjectAttribute GetNtmsObjectAttributeW
+#define SetNtmsObjectAttribute SetNtmsObjectAttributeW
+#define GetNtmsUIOptions GetNtmsUIOptionsW
+#define SetNtmsUIOptions SetNtmsUIOptionsW
+#define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestW
+#define CreateNtmsMedia CreateNtmsMediaW
+#define EjectDiskFromSADrive EjectDiskFromSADriveW
+#define GetVolumesFromDrive GetVolumesFromDriveW
+#else
+#define OpenNtmsSession OpenNtmsSessionA
+#define GetNtmsDeviceName GetNtmsDeviceNameA
+#define GetNtmsObjectInformation GetNtmsObjectInformationA
+#define SetNtmsObjectInformation SetNtmsObjectInformationA
+#define CreateNtmsMediaPool CreateNtmsMediaPoolA
+#define GetNtmsMediaPoolName GetNtmsMediaPoolNameA
+#define GetNtmsObjectAttribute GetNtmsObjectAttributeA
+#define SetNtmsObjectAttribute SetNtmsObjectAttributeA
+#define GetNtmsUIOptions GetNtmsUIOptionsA
+#define SetNtmsUIOptions SetNtmsUIOptionsA
+#define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestA
+#define CreateNtmsMedia CreateNtmsMediaA
+#define EjectDiskFromSADrive EjectDiskFromSADriveA
+#define GetVolumesFromDrive GetVolumesFromDriveA
+#endif
+
+#ifndef NTMS_NOREDEF
+
+  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
+  };
+
+#ifdef UNICODE
+#define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONW
+#define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONW
+#else
+#define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONA
+#define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONA
+#endif
+
+  typedef struct _NTMS_DRIVEINFORMATIONA {
+    DWORD Number;
+    DWORD State;
+    NTMS_GUID DriveType;
+    CHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
+    CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
+    CHAR szRevision[NTMS_REVISION_LENGTH];
+    WORD ScsiPort;
+    WORD ScsiBus;
+    WORD ScsiTarget;
+    WORD ScsiLun;
+    DWORD dwMountCount;
+    SYSTEMTIME LastCleanedTs;
+    NTMS_GUID SavedPartitionId;
+    NTMS_GUID Library;
+    GUID Reserved;
+    DWORD dwDeferDismountDelay;
+  } NTMS_DRIVEINFORMATIONA;
+
+  typedef struct _NTMS_DRIVEINFORMATIONW {
+    DWORD Number;
+    DWORD State;
+    NTMS_GUID DriveType;
+    WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
+    WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
+    WCHAR szRevision[NTMS_REVISION_LENGTH];
+    WORD ScsiPort;
+    WORD ScsiBus;
+    WORD ScsiTarget;
+    WORD ScsiLun;
+    DWORD dwMountCount;
+    SYSTEMTIME LastCleanedTs;
+    NTMS_GUID SavedPartitionId;
+    NTMS_GUID Library;
+    GUID Reserved;
+    DWORD dwDeferDismountDelay;
+  } NTMS_DRIVEINFORMATIONW;
+
+  enum NtmsLibraryType {
+    NTMS_LIBRARYTYPE_UNKNOWN = 0,NTMS_LIBRARYTYPE_OFFLINE = 1,NTMS_LIBRARYTYPE_ONLINE = 2,NTMS_LIBRARYTYPE_STANDALONE = 3
+  };
+
+  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;
+
+#ifdef UNICODE
+#define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONW
+#define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONW
+#else
+#define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONA
+#define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONA
+#endif
+
+  typedef struct _NTMS_CHANGERINFORMATIONA {
+    DWORD Number;
+    NTMS_GUID ChangerType;
+    CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
+    CHAR szRevision[NTMS_REVISION_LENGTH];
+    CHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
+    WORD ScsiPort;
+    WORD ScsiBus;
+    WORD ScsiTarget;
+    WORD ScsiLun;
+    NTMS_GUID Library;
+  } NTMS_CHANGERINFORMATIONA;
+
+  typedef struct _NTMS_CHANGERINFORMATIONW {
+    DWORD Number;
+    NTMS_GUID ChangerType;
+    WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
+    WCHAR szRevision[NTMS_REVISION_LENGTH];
+    WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH];
+    WORD ScsiPort;
+    WORD ScsiBus;
+    WORD ScsiTarget;
+    WORD ScsiLun;
+    NTMS_GUID Library;
+  } NTMS_CHANGERINFORMATIONW;
+
+  enum NtmsSlotState {
+    NTMS_SLOTSTATE_UNKNOWN = 0,NTMS_SLOTSTATE_FULL = 1,NTMS_SLOTSTATE_EMPTY = 2,NTMS_SLOTSTATE_NOTPRESENT = 3,NTMS_SLOTSTATE_NEEDSINVENTORY = 4
+  };
+
+  typedef struct _NTMS_STORAGESLOTINFORMATION {
+    DWORD Number;
+    DWORD State;
+    NTMS_GUID Library;
+  } NTMS_STORAGESLOTINFORMATION;
+
+  enum NtmsDoorState {
+    NTMS_DOORSTATE_UNKNOWN = 0,NTMS_DOORSTATE_CLOSED = 1,NTMS_DOORSTATE_OPEN = 2
+  };
+
+  typedef struct _NTMS_IEDOORINFORMATION {
+    DWORD Number;
+    DWORD State;
+    WORD MaxOpenSecs;
+    NTMS_GUID Library;
+  } NTMS_IEDOORINFORMATION;
+
+  enum NtmsPortPosition {
+    NTMS_PORTPOSITION_UNKNOWN = 0,NTMS_PORTPOSITION_EXTENDED = 1,NTMS_PORTPOSITION_RETRACTED = 2
+  };
+
+  enum NtmsPortContent {
+    NTMS_PORTCONTENT_UNKNOWN = 0,NTMS_PORTCONTENT_FULL = 1,NTMS_PORTCONTENT_EMPTY = 2
+  };
+
+  typedef struct _NTMS_IEPORTINFORMATION {
+    DWORD Number;
+    DWORD Content;
+    DWORD Position;
+    WORD MaxExtendSecs;
+    NTMS_GUID Library;
+  } NTMS_IEPORTINFORMATION;
+
+  enum NtmsBarCodeState {
+    NTMS_BARCODESTATE_OK = 1,NTMS_BARCODESTATE_UNREADABLE = 2
+  };
+
+  enum NtmsMediaState {
+    NTMS_MEDIASTATE_IDLE = 0,NTMS_MEDIASTATE_INUSE = 1,NTMS_MEDIASTATE_MOUNTED = 2,NTMS_MEDIASTATE_LOADED = 3,NTMS_MEDIASTATE_UNLOADED = 4,
+    NTMS_MEDIASTATE_OPERROR = 5,NTMS_MEDIASTATE_OPREQ = 6
+  };
+
+#ifdef UNICODE
+#define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONW
+#define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONW
+#else
+#define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONA
+#define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONA
+#endif
+
+  typedef struct _NTMS_PMIDINFORMATIONA {
+    NTMS_GUID CurrentLibrary;
+    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 = 1,NTMS_PARTSTATE_INCOMPATIBLE = 2,NTMS_PARTSTATE_DECOMMISSIONED = 3,
+    NTMS_PARTSTATE_AVAILABLE = 4,NTMS_PARTSTATE_ALLOCATED = 5,NTMS_PARTSTATE_COMPLETE = 6,NTMS_PARTSTATE_FOREIGN = 7,NTMS_PARTSTATE_IMPORT = 8,
+    NTMS_PARTSTATE_RESERVED = 9
+  };
+
+#define NTMS_PARTSTATE_NEW NTMS_PARTSTATE_UNKNOWN
+
+#ifdef UNICODE
+#define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONW
+#define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONW
+#else
+#define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONA
+#define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONA
+#endif
+
+  typedef struct _NTMS_PARTITIONINFORMATIONA {
+    NTMS_GUID PhysicalMedia;
+    NTMS_GUID LogicalMedia;
+    DWORD State;
+    WORD Side;
+    DWORD dwOmidLabelIdLength;
+    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;
+
+#ifdef UNICODE
+#define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONW
+#define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONW
+#else
+#define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONA
+#define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONA
+#endif
+
+  typedef struct _NTMS_DRIVETYPEINFORMATIONA {
+    CHAR szVendor[NTMS_VENDORNAME_LENGTH];
+    CHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
+    DWORD NumberOfHeads;
+    DWORD DeviceType;
+  } NTMS_DRIVETYPEINFORMATIONA;
+
+  typedef struct _NTMS_DRIVETYPEINFORMATIONW {
+    WCHAR szVendor[NTMS_VENDORNAME_LENGTH];
+    WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
+    DWORD NumberOfHeads;
+    DWORD DeviceType;
+  } NTMS_DRIVETYPEINFORMATIONW;
+
+#ifdef UNICODE
+#define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONW
+#define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONW
+#else
+#define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONA
+#define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONA
+#endif
+
+  typedef struct _NTMS_CHANGERTYPEINFORMATIONA {
+    CHAR szVendor[NTMS_VENDORNAME_LENGTH];
+    CHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
+    DWORD DeviceType;
+  } NTMS_CHANGERTYPEINFORMATIONA;
+
+  typedef struct _NTMS_CHANGERTYPEINFORMATIONW {
+    WCHAR szVendor[NTMS_VENDORNAME_LENGTH];
+    WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH];
+    DWORD DeviceType;
+  } NTMS_CHANGERTYPEINFORMATIONW;
+
+  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
+  };
+
+#ifdef UNICODE
+#define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONW
+#define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONW
+#else
+#define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONA
+#define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONA
+#endif
+
+  typedef struct _NTMS_LIBREQUESTINFORMATIONA {
+    DWORD OperationCode;
+    DWORD OperationOption;
+    DWORD State;
+    NTMS_GUID PartitionId;
+    NTMS_GUID DriveId;
+    NTMS_GUID PhysMediaId;
+    NTMS_GUID Library;
+    NTMS_GUID SlotId;
+    SYSTEMTIME TimeQueued;
+    SYSTEMTIME TimeCompleted;
+    CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
+    CHAR szUser[NTMS_USERNAME_LENGTH];
+    CHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
+    DWORD dwErrorCode;
+    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 = 1,NTMS_OPREQ_CLEANER = 2,NTMS_OPREQ_DEVICESERVICE = 3,NTMS_OPREQ_MOVEMEDIA = 4,
+    NTMS_OPREQ_MESSAGE = 5
+  };
+
+  enum NtmsOpreqState {
+    NTMS_OPSTATE_UNKNOWN = 0,NTMS_OPSTATE_SUBMITTED = 1,NTMS_OPSTATE_ACTIVE = 2,NTMS_OPSTATE_INPROGRESS = 3,NTMS_OPSTATE_REFUSED = 4,
+    NTMS_OPSTATE_COMPLETE = 5
+  };
+
+#ifdef UNICODE
+#define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONW
+#define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONW
+#else
+#define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONA
+#define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONA
+#endif
+
+  typedef struct _NTMS_OPREQUESTINFORMATIONA {
+    DWORD Request;
+    SYSTEMTIME Submitted;
+    DWORD State;
+    CHAR szMessage[NTMS_MESSAGE_LENGTH];
+    DWORD Arg1Type;
+    NTMS_GUID Arg1;
+    DWORD Arg2Type;
+    NTMS_GUID Arg2;
+    CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
+    CHAR szUser[NTMS_USERNAME_LENGTH];
+    CHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
+  } NTMS_OPREQUESTINFORMATIONA;
+
+  typedef struct _NTMS_OPREQUESTINFORMATIONW {
+    DWORD Request;
+    SYSTEMTIME Submitted;
+    DWORD State;
+    WCHAR szMessage[NTMS_MESSAGE_LENGTH];
+    DWORD Arg1Type;
+    NTMS_GUID Arg1;
+    DWORD Arg2Type;
+    NTMS_GUID Arg2;
+    WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH];
+    WCHAR szUser[NTMS_USERNAME_LENGTH];
+    WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH];
+  } NTMS_OPREQUESTINFORMATIONW;
+
+  typedef struct _NTMS_COMPUTERINFORMATION {
+    DWORD dwLibRequestPurgeTime;
+    DWORD dwOpRequestPurgeTime;
+    DWORD dwLibRequestFlags;
+    DWORD dwOpRequestFlags;
+    DWORD dwMediaPoolPolicy;
+  } NTMS_COMPUTERINFORMATION;
+
+  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
+  };
+
+#ifdef UNICODE
+#define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONW
+#define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONW
+#define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONW
+#else
+#define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONA
+#define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONA
+#define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONA
+#endif
+
+  enum NtmsOperationalState {
+    NTMS_READY = 0,NTMS_INITIALIZING = 10,NTMS_NEEDS_SERVICE = 20,NTMS_NOT_PRESENT = 21
+  };
+
+  typedef struct _NTMS_OBJECTINFORMATIONA {
+    DWORD dwSize;
+    DWORD dwType;
+    SYSTEMTIME Created;
+    SYSTEMTIME Modified;
+    NTMS_GUID ObjectGuid;
+    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;
+
+#ifdef UNICODE
+#define NTMS_I1_LIBREQUESTINFORMATION NTMS_I1_LIBREQUESTINFORMATIONW
+#define NTMS_I1_PARTITIONINFORMATION NTMS_I1_PARTITIONINFORMATIONW
+#define NTMS_I1_PMIDINFORMATION NTMS_I1_PMIDINFORMATIONW
+#define NTMS_I1_OPREQUESTINFORMATION NTMS_I1_OPREQUESTINFORMATIONW
+#define NTMS_I1_OBJECTINFORMATION NTMS_I1_OBJECTINFORMATIONW
+#else
+#define NTMS_I1_LIBREQUESTINFORMATION NTMS_I1_LIBREQUESTINFORMATIONA
+#define NTMS_I1_PARTITIONINFORMATION NTMS_I1_PARTITIONINFORMATIONA
+#define NTMS_I1_PMIDINFORMATION NTMS_I1_PMIDINFORMATIONA
+#define NTMS_I1_OPREQUESTINFORMATION NTMS_I1_OPREQUESTINFORMATIONA
+#define NTMS_I1_OBJECTINFORMATION NTMS_I1_OBJECTINFORMATIONA
+#endif
+
+  typedef struct _NTMS_I1_LIBRARYINFORMATION {
+    DWORD LibraryType;
+    NTMS_GUID CleanerSlot;
+    NTMS_GUID CleanerSlotDefault;
+    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
+  };
+
+#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 = 2,NTMS_OBJ_DELETE = 3,NTMS_EVENT_SIGNAL = 4,NTMS_EVENT_COMPLETE = 5
+  };
+
+  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