home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / NTMSAPI.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  33.6 KB  |  1,292 lines

  1. /*++
  2.  
  3.   Copyright (c) 1996-1997 Microsoft Corporation
  4.   Copyright (c) 1996-1997 Highground Systems
  5.  
  6.   Module Name:
  7.  
  8.     NtmsApi.h
  9.  
  10.   Abstract:
  11.  
  12.     This module contains the NTMS API prototypes and public definitions
  13.     supported in the API.  The NTMS API provide a "C" interface to NTMS.
  14.     This header can be included in "C" and "C++" code.
  15.  
  16.   Author:
  17.  
  18.     Tom Hansen (thansen@highground.com) 25-Nov-1996
  19.  
  20.   Revision History:
  21.  
  22. --*/
  23.  
  24. #ifndef _INCL_NTMSAPI_H_
  25. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  26. #define _INCL_NTMSAPI_H_
  27.  
  28. #pragma pack(8)
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. typedef GUID NTMS_GUID;
  35. typedef GUID* LPNTMS_GUID;
  36. #define NTMS_NULLGUID  {0,0,0,{0,0,0,0,0,0,0,0}}
  37. #define NTMS_IS_NULLGUID(id) ((id.Data1==0)&&(id.Data2==0)&&(id.Data3==0)&&\
  38.                               (id.Data4[0]==0)&&(id.Data4[1]==0)&&(id.Data4[2]==0)&&\
  39.                               (id.Data4[3]==0)&&(id.Data4[4]==0)&&(id.Data4[5]==0)&&\
  40.                               (id.Data4[6]==0)&&(id.Data4[7]==0))
  41.      
  42. #ifndef NTMS_NOREDEF
  43. // WARNING : The object types are provided as an ordered list of NTMS
  44. // database objects.  DO NOT change the order without also changing the
  45. // object metadata table in obmeta.cpp.
  46. enum NtmsObjectsTypes {
  47.     NTMS_UNKNOWN = 0,
  48.     NTMS_OBJECT,
  49.     NTMS_CHANGER,
  50.     NTMS_CHANGER_TYPE,
  51.     NTMS_COMPUTER,
  52.     NTMS_DRIVE,
  53.     NTMS_DRIVE_TYPE,
  54.     NTMS_IEDOOR,
  55.     NTMS_IEPORT,
  56.     NTMS_LIBRARY,
  57.     NTMS_LIBREQUEST,
  58.     NTMS_LOGICAL_MEDIA,
  59.     NTMS_MEDIA_POOL,
  60.     NTMS_MEDIA_TYPE,
  61.     NTMS_PARTITION,
  62.     NTMS_PHYSICAL_MEDIA,
  63.     NTMS_STORAGESLOT,
  64.     NTMS_OPREQUEST,
  65.  
  66.     NTMS_NUMBER_OF_OBJECT_TYPES
  67. };
  68.  
  69. // define unicode/ascii specific functions.  This include functions that
  70. // get or return strings.
  71. #ifdef UNICODE
  72. #define OpenNtmsSession OpenNtmsSessionW
  73. #define GetNtmsDeviceName GetNtmsDeviceNameW
  74. #define GetNtmsObjectInformation GetNtmsObjectInformationW
  75. #define SetNtmsObjectInformation SetNtmsObjectInformationW
  76. #define CreateNtmsMediaPool CreateNtmsMediaPoolW
  77. #define GetNtmsMediaPoolName GetNtmsMediaPoolNameW
  78. #define GetNtmsObjectAttribute GetNtmsObjectAttributeW
  79. #define SetNtmsObjectAttribute SetNtmsObjectAttributeW
  80. #define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestW
  81. #else
  82. #define OpenNtmsSession OpenNtmsSessionA
  83. #define GetNtmsDeviceName GetNtmsDeviceNameA
  84. #define GetNtmsObjectInformation GetNtmsObjectInformationA
  85. #define SetNtmsObjectInformation SetNtmsObjectInformationA
  86. #define CreateNtmsMediaPool CreateNtmsMediaPoolA
  87. #define GetNtmsMediaPoolName GetNtmsMediaPoolNameA
  88. #define GetNtmsObjectAttribute GetNtmsObjectAttributeA
  89. #define SetNtmsObjectAttribute SetNtmsObjectAttributeA
  90. #define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestA
  91. #endif
  92.  
  93. #endif    // NTMS_NOREDEF
  94. //=======================================================================
  95. // SESSION ESTABLISHMENT
  96. //=======================================================================
  97.  
  98. #ifndef MIDL_PASS
  99.  
  100. enum NtmsSessionOptions {
  101.     NTMS_SESSION_QUERYEXPEDITE = 0x1
  102. };
  103. HANDLE WINAPI OpenNtmsSessionW(
  104.     LPCWSTR lpServer,
  105.     LPCWSTR lpApplication,
  106.     DWORD    dwOptions
  107.     );
  108.  
  109. HANDLE WINAPI OpenNtmsSessionA(
  110.     LPCSTR lpServer,
  111.     LPCSTR lpApplication,
  112.     DWORD    dwOptions
  113.     );
  114.  
  115. DWORD WINAPI CloseNtmsSession(
  116.     HANDLE hSession
  117.     );
  118.  
  119. #endif    // MIDL_PASS
  120.  
  121. #ifndef NTMS_NOREDEF
  122. //=======================================================================
  123. // MOUNT DEFINITIONS
  124. //=======================================================================
  125. enum NtmsMountOptions {
  126.     NTMS_MOUNT_READ = 0x0001,
  127.     NTMS_MOUNT_WRITE = 0x0002,
  128.     NTMS_MOUNT_ERROR_NOT_AVAILABLE = 0x0004,
  129.     NTMS_MOUNT_ERROR_IF_UNAVAILABLE = 0x0004,
  130.     NTMS_MOUNT_ERROR_OFFLINE = 0x0008,
  131.     NTMS_MOUNT_ERROR_IF_OFFLINE = 0x0008,
  132.     NTMS_MOUNT_SPECIFIC_DRIVE = 0x0010,
  133.     NTMS_MOUNT_NOWAIT = 0x0020
  134. };
  135.  
  136. enum NtmsDismountOptions {
  137.     NTMS_DISMOUNT_DEFERRED = 0x0001
  138. };
  139.  
  140. enum NtmsMountPriority {
  141.     NTMS_PRIORITY_DEFAULT = 50,
  142.     NTMS_PRIORITY_HIGHEST = 1,
  143.     NTMS_PRIORITY_HIGH    = 25,
  144.     NTMS_PRIORITY_NORMAL  = 50,
  145.     NTMS_PRIORITY_LOW     = 75,
  146.     NTMS_PRIORITY_LOWEST  = 100
  147. };
  148.  
  149. #endif    // NTMS_NOREDEF
  150. //=======================================================================
  151. // MOUNT AND DISMOUNT APIS
  152. //=======================================================================
  153.  
  154. #ifndef MIDL_PASS
  155. DWORD WINAPI MountNtmsMedia(
  156.     HANDLE hSession,
  157.     LPNTMS_GUID lpMediaId,
  158.     LPNTMS_GUID lpDriveId,
  159.     DWORD dwCount,
  160.     DWORD dwOptions,
  161.     DWORD dwPriority,
  162.     DWORD dwTimeout
  163.     );
  164.  
  165. DWORD WINAPI DismountNtmsMedia(
  166.     HANDLE hSession,
  167.     LPNTMS_GUID lpMediaId,
  168.     DWORD dwCount,
  169.     DWORD dwOptions
  170.     );
  171.  
  172. #endif    // MIDL_PASS
  173.  
  174. #ifndef NTMS_NOREDEF
  175. //=======================================================================
  176. // ALLOCATE DEFINITIONS
  177. //=======================================================================
  178. enum NtmsAllocateOptions {
  179.     NTMS_ALLOCATE_NEW = 0x0001,
  180.     NTMS_ALLOCATE_NEXT = 0x0002,
  181.     NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE = 0x0004
  182. };
  183.  
  184. #endif
  185.  
  186. //=======================================================================
  187. // ALLOCATE AND DEALLOCATE APIS
  188. //=======================================================================
  189. #ifndef MIDL_PASS
  190. DWORD WINAPI AllocateNtmsMedia(
  191.     HANDLE hSession,
  192.     LPNTMS_GUID lpMediaPool,
  193.     LPNTMS_GUID    lpPartition,    // optional
  194.     LPNTMS_GUID    lpMediaId,    // OUTPUT, media id or operator request id
  195.     DWORD dwOptions,
  196.     DWORD dwTimeout
  197.     );
  198.  
  199. DWORD WINAPI DeallocateNtmsMedia(
  200.     HANDLE hSession,
  201.     LPNTMS_GUID lpMediaId,
  202.     DWORD dwOptions
  203.     );
  204.  
  205. DWORD WINAPI SwapNtmsMedia( 
  206.     HANDLE hSession, 
  207.     LPNTMS_GUID lpMediaId1,
  208.     LPNTMS_GUID lpMediaId2
  209.     );
  210.  
  211. //=======================================================================
  212. // MEDIA STATES
  213. //=======================================================================
  214. DWORD WINAPI DecommissionNtmsMedia(
  215.     HANDLE hSession,
  216.     LPNTMS_GUID lpMediaId
  217.     );
  218.  
  219. DWORD WINAPI SetNtmsMediaComplete(
  220.     HANDLE hSession,
  221.     LPNTMS_GUID lpMediaId
  222.     );
  223.  
  224. DWORD WINAPI DeleteNtmsMedia(
  225.     HANDLE hSession,
  226.     LPNTMS_GUID lpMediaId
  227.     );
  228. #endif    // MIDL_PASS
  229.  
  230. #ifndef NTMS_NOREDEF
  231. //=======================================================================
  232. // MEDIA POOLS
  233. //=======================================================================
  234. enum NtmsCreateOptions {
  235.     NTMS_OPEN_EXISTING = 0x0001,
  236.     NTMS_CREATE_NEW = 0x0002,
  237.     NTMS_OPEN_ALWAYS = 0x0003
  238. };
  239. #endif    // NTMS_NOREDEF
  240.  
  241. #ifndef MIDL_PASS
  242. #ifdef PRE_SEVIL
  243. DWORD WINAPI CreateNtmsMediaPool(
  244.     HANDLE hSession,
  245.     LPCTSTR lpPoolName,
  246.     LPNTMS_GUID lpMediaType,
  247.     DWORD dwAction,
  248.     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  249.     LPNTMS_GUID lpPoolId        // OUT
  250.     );
  251. #endif
  252. // SEVILIA
  253. DWORD WINAPI CreateNtmsMediaPoolA(
  254.     HANDLE hSession,
  255.     LPCSTR lpPoolName,
  256.     LPNTMS_GUID lpMediaType,
  257.     DWORD dwAction,
  258.     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  259.     LPNTMS_GUID lpPoolId
  260.     );
  261.  
  262. DWORD WINAPI CreateNtmsMediaPoolW(
  263.     HANDLE hSession,
  264.     LPCWSTR lpPoolName,
  265.     LPNTMS_GUID lpMediaType,
  266.     DWORD dwAction,
  267.     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  268.     LPNTMS_GUID lpPoolId
  269.     );
  270.  
  271. DWORD WINAPI GetNtmsMediaPoolNameA(
  272.     HANDLE hSession,
  273.     LPNTMS_GUID lpPoolId,
  274.     char *lpBufName,
  275.     LPDWORD lpdwNameSize
  276.     );
  277.  
  278. DWORD WINAPI GetNtmsMediaPoolNameW(
  279.     HANDLE hSession,
  280.     LPNTMS_GUID lpPoolId,
  281.     wchar_t *lpBufName,
  282.     LPDWORD lpdwNameSize
  283.     );
  284.  
  285. DWORD WINAPI MoveToNtmsMediaPool(
  286.     HANDLE hSession,
  287.     LPNTMS_GUID lpMediaId,
  288.     LPNTMS_GUID lpPoolId
  289.     );
  290.  
  291. DWORD WINAPI DeleteNtmsMediaPool(
  292.     HANDLE hSession,
  293.     LPNTMS_GUID lpPoolId
  294.     );
  295.  
  296. DWORD WINAPI DeleteNtmsLibrary(
  297.     HANDLE hSession,
  298.     LPNTMS_GUID lpLibraryId
  299.     );
  300.  
  301. #endif    // MIDL_PASS
  302.  
  303. #ifndef NTMS_NOREDEF
  304.  
  305. //======================================================================
  306. // OBJECT INFORMATION STRUCTURES
  307. //======================================================================
  308. enum NtmsDriveState {
  309.     NTMS_DRIVESTATE_DISMOUNTED        = 0,
  310.     NTMS_DRIVESTATE_MOUNTED            = 1,
  311.     NTMS_DRIVESTATE_LOADED            = 2,
  312.     NTMS_DRIVESTATE_UNLOADED        = 5,
  313.     NTMS_DRIVESTATE_BEING_CLEANED    = 6,
  314.     NTMS_DRIVESTATE_DISMOUNTABLE    = 7
  315. };
  316.  
  317. #define NTMS_DEVICENAME_LENGTH        64
  318. #define NTMS_SERIALNUMBER_LENGTH    32
  319. #define NTMS_REVISION_LENGTH        32
  320.  
  321. #ifdef UNICODE 
  322. #define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONW
  323. #define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONW
  324. #else
  325. #define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONA
  326. #define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONA
  327. #endif 
  328.  
  329. typedef struct _NTMS_DRIVEINFORMATIONA {
  330.     DWORD        Number;
  331.     DWORD        State;
  332.     NTMS_GUID    DriveType;
  333.     CHAR        szDeviceName[NTMS_DEVICENAME_LENGTH];
  334.     CHAR        szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
  335.     CHAR        szRevision[NTMS_REVISION_LENGTH];
  336.     WORD        ScsiPort;
  337.     WORD        ScsiBus;
  338.     WORD        ScsiTarget;
  339.     WORD        ScsiLun;
  340.     DWORD        dwMountCount;
  341.     SYSTEMTIME    LastCleanedTs;
  342.     NTMS_GUID    SavedPartitionId;
  343.     NTMS_GUID    Library;
  344.     GUID        Reserved;
  345.     DWORD        dwDeferDismountDelay;
  346. } NTMS_DRIVEINFORMATIONA;
  347.  
  348. typedef struct _NTMS_DRIVEINFORMATIONW {
  349.     DWORD        Number;
  350.     DWORD        State;
  351.     NTMS_GUID    DriveType;
  352.     WCHAR        szDeviceName[NTMS_DEVICENAME_LENGTH];
  353.     WCHAR        szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
  354.     WCHAR        szRevision[NTMS_REVISION_LENGTH];
  355.     WORD        ScsiPort;
  356.     WORD        ScsiBus;
  357.     WORD        ScsiTarget;
  358.     WORD        ScsiLun;
  359.     DWORD        dwMountCount;
  360.     SYSTEMTIME    LastCleanedTs;
  361.     NTMS_GUID    SavedPartitionId;
  362.     NTMS_GUID    Library;
  363.     GUID        Reserved;
  364.     DWORD        dwDeferDismountDelay;
  365. } NTMS_DRIVEINFORMATIONW;
  366.  
  367. enum NtmsLibraryType {
  368.     NTMS_LIBRARYTYPE_UNKNOWN    = 0,
  369.     NTMS_LIBRARYTYPE_OFFLINE    = 1,
  370.     NTMS_LIBRARYTYPE_ONLINE        = 2,
  371.     NTMS_LIBRARYTYPE_STANDALONE = 3
  372. };
  373.  
  374. enum NtmsInventoryMethod {
  375.     NTMS_INVENTORY_NONE            = 0,
  376.     NTMS_INVENTORY_FAST            = 1,
  377.     NTMS_INVENTORY_OMID            = 2,
  378.     NTMS_INVENTORY_DEFAULT            = 3,
  379.     NTMS_INVENTORY_MAX
  380. };
  381.  
  382. typedef struct _NTMS_LIBRARYINFORMATION {
  383.     DWORD        LibraryType;
  384.     NTMS_GUID    CleanerSlot;
  385.     NTMS_GUID    CleanerSlotDefault;
  386.     BOOL        LibrarySupportsDriveCleaning;
  387.     BOOL        BarCodeReaderInstalled;
  388.     DWORD        InventoryMethod;
  389.     DWORD        dwCleanerUsesRemaining;
  390.     DWORD        FirstDriveNumber;
  391.     DWORD        dwNumberOfDrives;
  392.     DWORD        FirstSlotNumber;
  393.     DWORD        dwNumberOfSlots;
  394.     DWORD        FirstDoorNumber;
  395.     DWORD        dwNumberOfDoors;
  396.     DWORD        FirstPortNumber;
  397.     DWORD        dwNumberOfPorts;
  398.     DWORD        FirstChangerNumber;
  399.     DWORD        dwNumberOfChangers;
  400.     DWORD        dwNumberOfMedia;
  401.     DWORD        dwNumberOfMediaTypes;
  402.     DWORD        dwNumberOfLibRequests;
  403.     GUID        Reserved;
  404. } NTMS_LIBRARYINFORMATION;
  405.  
  406. #ifdef UNICODE
  407. #define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONW
  408. #define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONW
  409. #else
  410. #define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONA
  411. #define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONA
  412. #endif
  413.  
  414. typedef struct _NTMS_CHANGERINFORMATIONA {
  415.     DWORD        Number;
  416.     NTMS_GUID    ChangerType;
  417.     CHAR        szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
  418.     CHAR        szRevision[NTMS_REVISION_LENGTH];
  419.     CHAR        szDeviceName[NTMS_DEVICENAME_LENGTH];
  420.     WORD        ScsiPort;
  421.     WORD        ScsiBus;
  422.     WORD        ScsiTarget;
  423.     WORD        ScsiLun;
  424.     NTMS_GUID    Library;
  425. } NTMS_CHANGERINFORMATIONA;
  426.  
  427. typedef struct _NTMS_CHANGERINFORMATIONW {
  428.     DWORD        Number;
  429.     NTMS_GUID    ChangerType;
  430.     WCHAR        szSerialNumber[NTMS_SERIALNUMBER_LENGTH];
  431.     WCHAR        szRevision[NTMS_REVISION_LENGTH];
  432.     WCHAR        szDeviceName[NTMS_DEVICENAME_LENGTH];
  433.     WORD        ScsiPort;
  434.     WORD        ScsiBus;
  435.     WORD        ScsiTarget;
  436.     WORD        ScsiLun;
  437.     NTMS_GUID    Library;
  438. } NTMS_CHANGERINFORMATIONW;
  439.  
  440. enum NtmsSlotState {
  441.     NTMS_SLOTSTATE_UNKNOWN            = 0,
  442.     NTMS_SLOTSTATE_FULL                = 1,
  443.     NTMS_SLOTSTATE_EMPTY            = 2,
  444.     NTMS_SLOTSTATE_NOTPRESENT        = 3,   
  445.     NTMS_SLOTSTATE_NEEDSINVENTORY    = 4
  446. };
  447.  
  448. typedef struct _NTMS_STORAGESLOTINFORMATION {
  449.     DWORD        Number;
  450.     DWORD        State;
  451.     NTMS_GUID    Library;
  452. } NTMS_STORAGESLOTINFORMATION;
  453.  
  454. enum NtmsDoorState {
  455.     NTMS_DOORSTATE_UNKNOWN        = 0,
  456.     NTMS_DOORSTATE_CLOSED        = 1,
  457.     NTMS_DOORSTATE_OPEN            = 2
  458. };
  459.  
  460. typedef struct _NTMS_IEDOORINFORMATION {
  461.     DWORD        Number;
  462.     DWORD        State;
  463.     WORD        MaxOpenSecs;
  464.     NTMS_GUID    Library;
  465. } NTMS_IEDOORINFORMATION;
  466.  
  467. enum NtmsPortPosition {
  468.     NTMS_PORTPOSITION_UNKNOWN    = 0,
  469.     NTMS_PORTPOSITION_EXTENDED    = 1,
  470.     NTMS_PORTPOSITION_RETRACTED    = 2
  471. };
  472.  
  473. enum NtmsPortContent {
  474.     NTMS_PORTCONTENT_UNKNOWN    = 0,
  475.     NTMS_PORTCONTENT_FULL        = 1,
  476.     NTMS_PORTCONTENT_EMPTY        = 2
  477. };
  478.  
  479. typedef struct _NTMS_IEPORTINFORMATION {
  480.     DWORD        Number;
  481.     DWORD        Content;
  482.     DWORD        Position;
  483.     WORD        MaxExtendSecs;
  484.     NTMS_GUID    Library;
  485. } NTMS_IEPORTINFORMATION;
  486.  
  487. enum NtmsBarCodeState {
  488.     NTMS_BARCODESTATE_OK            = 1,
  489.     NTMS_BARCODESTATE_UNREADABLE    = 2
  490. };
  491.  
  492. enum NtmsMediaState {
  493.     NTMS_MEDIASTATE_IDLE        = 0,
  494.     NTMS_MEDIASTATE_INUSE        = 1,
  495.     NTMS_MEDIASTATE_MOUNTED        = 2,
  496.     NTMS_MEDIASTATE_LOADED        = 3,
  497.     NTMS_MEDIASTATE_UNLOADED    = 4,
  498.     NTMS_MEDIASTATE_OPERROR        = 5,
  499.     // media is waiting for operator request servicing
  500.     NTMS_MEDIASTATE_OPREQ        = 6
  501. };
  502.  
  503. #define NTMS_BARCODE_LENGTH        64
  504. #define NTMS_SEQUENCE_LENGTH    32
  505.  
  506. #ifdef UNICODE
  507. #define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONW
  508. #define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONW
  509. #else
  510. #define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONA
  511. #define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONA
  512. #endif
  513.  
  514. typedef struct _NTMS_PMIDINFORMATIONA {
  515.     NTMS_GUID    CurrentLibrary;    // the current library
  516.     NTMS_GUID    MediaPool;        // media pool that the media belongs to
  517.     NTMS_GUID    Location;        // actual location of the media
  518.     DWORD        LocationType;
  519.     NTMS_GUID    MediaType;
  520.     NTMS_GUID    HomeSlot;        // home slot for online media
  521.     CHAR        szBarCode[NTMS_BARCODE_LENGTH];    // bar code string
  522.     DWORD        BarCodeState;    // current state of the bar code
  523.     CHAR        szSequenceNumber[NTMS_SEQUENCE_LENGTH];
  524.     DWORD        MediaState;        // current media state
  525.     DWORD        dwNumberOfPartitions;
  526. } NTMS_PMIDINFORMATIONA;
  527.  
  528. typedef struct _NTMS_PMIDINFORMATIONW {
  529.     NTMS_GUID    CurrentLibrary;    // the current library
  530.     NTMS_GUID    MediaPool;        // media pool that the media belongs to
  531.     NTMS_GUID    Location;        // actual location of the media
  532.     DWORD        LocationType;
  533.     NTMS_GUID    MediaType;
  534.     NTMS_GUID    HomeSlot;        // home slot for online media
  535.     WCHAR        szBarCode[NTMS_BARCODE_LENGTH];    // bar code string
  536.     DWORD        BarCodeState;    // current state of the bar code
  537.     WCHAR        szSequenceNumber[32];
  538.     DWORD        MediaState;        // current media state
  539.     DWORD        dwNumberOfPartitions;
  540. } NTMS_PMIDINFORMATIONW;
  541.  
  542. typedef struct _NTMS_LMIDINFORMATION {
  543.     NTMS_GUID    MediaPool;
  544.     DWORD        dwNumberOfPartitions;
  545. } NTMS_LMIDINFORMATION;
  546.  
  547. enum NtmsPartitionState {
  548.     NTMS_PARTSTATE_UNKNOWN            = 0,
  549.     NTMS_PARTSTATE_UNPREPARED        = 1,
  550.     NTMS_PARTSTATE_INCOMPATIBLE        = 2,        
  551.     NTMS_PARTSTATE_DECOMMISSIONED    = 3,
  552.     NTMS_PARTSTATE_AVAILABLE        = 4,
  553.     NTMS_PARTSTATE_ALLOCATED        = 5,
  554.     NTMS_PARTSTATE_COMPLETE         = 6,
  555.     NTMS_PARTSTATE_FOREIGN          = 7,
  556.     NTMS_PARTSTATE_IMPORT           = 8,
  557.     NTMS_PARTSTATE_RESERVED            = 9
  558. };
  559. // define the new state as the unknown state for now.
  560. #define NTMS_PARTSTATE_NEW NTMS_PARTSTATE_UNKNOWN
  561.  
  562. #ifdef UNICODE
  563. #define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONW
  564. #define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONW
  565. #else
  566. #define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONA
  567. #define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONA
  568. #endif
  569.  
  570. typedef struct _NTMS_PARTITIONINFORMATIONA {
  571.     NTMS_GUID    PhysicalMedia;
  572.     NTMS_GUID    LogicalMedia;
  573.     DWORD        State;
  574.     WORD        Side;
  575.     DWORD        dwOmidLabelIdLength;    // binary id
  576.     BYTE        OmidLabelId[255];
  577.     CHAR        szOmidLabelType[64];    // type string
  578.     CHAR        szOmidLabelInfo[256];    // info string
  579.     DWORD        dwMountCount;
  580.     DWORD        dwAllocateCount;
  581. } NTMS_PARTITIONINFORMATIONA;
  582.  
  583.  
  584. typedef struct _NTMS_PARTITIONINFORMATIONW {
  585.     NTMS_GUID    PhysicalMedia;
  586.     NTMS_GUID    LogicalMedia;
  587.     DWORD        State;
  588.     WORD        Side;
  589.     DWORD        dwOmidLabelIdLength;    // binary id
  590.     BYTE        OmidLabelId[255];
  591.     WCHAR        szOmidLabelType[64];    // type string
  592.     WCHAR        szOmidLabelInfo[256];    // info string
  593.     DWORD        dwMountCount;
  594.     DWORD        dwAllocateCount;
  595. } NTMS_PARTITIONINFORMATIONW;
  596.  
  597. enum NtmsPoolType {
  598.     NTMS_POOLTYPE_UNKNOWN            = 0,
  599.     NTMS_POOLTYPE_SCRATCH            = 1,
  600.     NTMS_POOLTYPE_FOREIGN            = 2,
  601.     NTMS_POOLTYPE_IMPORT            = 3,
  602.     NTMS_POOLTYPE_APPLICATION        = 1000
  603. };
  604.  
  605.  
  606. enum NtmsAllocationPolicy {
  607.     NTMS_ALLOCATE_FROMSCRATCH = 1
  608. };
  609.  
  610. enum NtmsDeallocationPolicy {
  611.     NTMS_DEALLOCATE_TOSCRATCH = 1
  612. };
  613.  
  614. typedef struct _NTMS_MEDIAPOOLINFORMATION {
  615.      DWORD        PoolType;
  616.      NTMS_GUID    MediaType;
  617.      NTMS_GUID    Parent;
  618.      DWORD        AllocationPolicy;
  619.      DWORD        DeallocationPolicy;
  620.      DWORD        dwMaxAllocates;
  621.      DWORD        dwNumberOfPhysicalMedia;
  622.      DWORD        dwNumberOfLogicalMedia;
  623.      DWORD        dwNumberOfMediaPools;
  624. } NTMS_MEDIAPOOLINFORMATION;
  625.  
  626. enum NtmsReadWriteCharacteristics {
  627.     NTMS_MEDIARW_UNKNOWN    = 0,
  628.     NTMS_MEDIARW_REWRITABLE    = 1,
  629.     NTMS_MEDIARW_WRITEONCE    = 2,
  630.     NTMS_MEDIARW_READONLY    = 3
  631. };
  632.  
  633. #define NTMS_VENDORNAME_LENGTH        32
  634. #define NTMS_PRODUCTNAME_LENGTH        32
  635.  
  636. typedef struct _NTMS_MEDIATYPEINFORMATION {
  637.     DWORD    MediaType;    // MediaTypeCodes
  638.     DWORD    NumberOfSides;
  639.     DWORD    ReadWriteCharacteristics;
  640.     DWORD    DeviceType;
  641. } NTMS_MEDIATYPEINFORMATION;
  642.  
  643. #ifdef UNICODE
  644. #define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONW
  645. #define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONW
  646. #else
  647. #define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONA
  648. #define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONA
  649. #endif
  650.  
  651. typedef struct _NTMS_DRIVETYPEINFORMATIONA {
  652.     CHAR    szVendor[NTMS_VENDORNAME_LENGTH];
  653.     CHAR    szProduct[NTMS_PRODUCTNAME_LENGTH];
  654.     DWORD    NumberOfHeads;
  655.     DWORD    DeviceType;
  656. } NTMS_DRIVETYPEINFORMATIONA;
  657.  
  658. typedef struct _NTMS_DRIVETYPEINFORMATIONW {
  659.     WCHAR    szVendor[NTMS_VENDORNAME_LENGTH];
  660.     WCHAR    szProduct[NTMS_PRODUCTNAME_LENGTH];
  661.     DWORD    NumberOfHeads;
  662.     DWORD    DeviceType;
  663. } NTMS_DRIVETYPEINFORMATIONW;
  664.  
  665. #ifdef UNICODE
  666. #define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONW
  667. #define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONW
  668. #else
  669. #define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONA
  670. #define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONA
  671. #endif
  672.  
  673. typedef struct _NTMS_CHANGERTYPEINFORMATIONA {
  674.     CHAR    szVendor[NTMS_VENDORNAME_LENGTH];
  675.     CHAR    szProduct[NTMS_PRODUCTNAME_LENGTH];
  676.     DWORD    DeviceType;
  677. } NTMS_CHANGERTYPEINFORMATIONA;
  678.  
  679. typedef struct _NTMS_CHANGERTYPEINFORMATIONW {
  680.     WCHAR    szVendor[NTMS_VENDORNAME_LENGTH];
  681.     WCHAR    szProduct[NTMS_PRODUCTNAME_LENGTH];
  682.     DWORD    DeviceType;
  683. } NTMS_CHANGERTYPEINFORMATIONW;
  684.  
  685. #define NTMS_USERNAME_LENGTH        64
  686. #define NTMS_APPLICATIONNAME_LENGTH    64
  687. #define NTMS_COMPUTERNAME_LENGTH    64
  688.  
  689.  
  690. enum NtmsLmOperation {
  691.     NTMS_LM_REMOVE          = 0,
  692.     NTMS_LM_DISABLECHANGER  = 1,
  693.     NTMS_LM_ENABLECHANGER   = 2,
  694.     NTMS_LM_DISABLEDRIVE    = 3,
  695.     NTMS_LM_ENABLEDRIVE     = 4,
  696.     NTMS_LM_DISABLEMEDIA    = 5,
  697.     NTMS_LM_ENABLEMEDIA     = 6,
  698.     NTMS_LM_UPDATEOMID      = 7,
  699.     NTMS_LM_INVENTORY       = 8,
  700.     NTMS_LM_DOORACCESS      = 9,
  701.     NTMS_LM_EJECT           = 10,
  702.     NTMS_LM_EJECTCLEANER    = 11,
  703.     NTMS_LM_INJECT          = 12,
  704.     NTMS_LM_INJECTCLEANER   = 13,
  705.     NTMS_LM_PROCESSOMID     = 14,
  706.     NTMS_LM_CLEANDRIVE      = 15,
  707.     NTMS_LM_DISMOUNT        = 16,
  708.     NTMS_LM_MOUNT           = 17,
  709.     NTMS_LM_WRITESCRATCH    = 18,
  710.     NTMS_LM_CLASSIFY        = 19,
  711.     NTMS_LM_RESERVECLEANER  = 20,
  712.     NTMS_LM_RELEASECLEANER  = 21,
  713.     NTMS_LM_MAXWORKITEM 
  714. };
  715.  
  716. enum NtmsLmState {
  717.     NTMS_LM_QUEUED        = 0,
  718.     NTMS_LM_INPROCESS    = 1,
  719.     NTMS_LM_PASSED        = 2,
  720.     NTMS_LM_FAILED        = 3,
  721.     NTMS_LM_INVALID        = 4,
  722.     NTMS_LM_WAITING        = 5,
  723.     NTMS_LM_DEFFERED    = 6,
  724.     NTMS_LM_CANCELLED    = 7,
  725.     NTMS_LM_STOPPED        = 8
  726. };
  727.  
  728. #ifdef UNICODE
  729. #define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONW
  730. #define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONW
  731. #else
  732. #define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONA
  733. #define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONA
  734. #endif
  735.  
  736. typedef struct _NTMS_LIBREQUESTINFORMATIONA {
  737.     DWORD        OperationCode;
  738.     DWORD        OperationOption;
  739.     DWORD        State;
  740.     NTMS_GUID    PartitionId;
  741.     NTMS_GUID    DriveId;
  742.     NTMS_GUID    PhysMediaId;
  743.     NTMS_GUID    Library;
  744.     NTMS_GUID    SlotId;
  745.     SYSTEMTIME    TimeQueued;
  746.     SYSTEMTIME    TimeCompleted;
  747.     CHAR        szApplication[NTMS_APPLICATIONNAME_LENGTH];
  748.     CHAR        szUser[NTMS_USERNAME_LENGTH];
  749.     CHAR        szComputer[NTMS_COMPUTERNAME_LENGTH];
  750. } NTMS_LIBREQUESTINFORMATIONA;
  751.  
  752. typedef struct _NTMS_LIBREQUESTINFORMATIONW {
  753.     DWORD        OperationCode;
  754.     DWORD        OperationOption;
  755.     DWORD        State;
  756.     NTMS_GUID    PartitionId;
  757.     NTMS_GUID    DriveId;
  758.     NTMS_GUID    PhysMediaId;
  759.     NTMS_GUID    Library;
  760.     NTMS_GUID    SlotId;
  761.     SYSTEMTIME    TimeQueued;
  762.     SYSTEMTIME    TimeCompleted;
  763.     WCHAR        szApplication[NTMS_APPLICATIONNAME_LENGTH];
  764.     WCHAR        szUser[NTMS_USERNAME_LENGTH];
  765.     WCHAR        szComputer[NTMS_COMPUTERNAME_LENGTH];
  766. } NTMS_LIBREQUESTINFORMATIONW;
  767.  
  768. #define NTMS_MESSAGE_LENGTH        127
  769.  
  770. enum NtmsOpreqCommand {
  771.     NTMS_OPREQ_UNKNOWN            = 0,
  772.     NTMS_OPREQ_NEWMEDIA            = 1,
  773.     NTMS_OPREQ_CLEANER            = 2,
  774.     NTMS_OPREQ_DEVICESERVICE    = 3,
  775.     NTMS_OPREQ_MOVEMEDIA        = 4,
  776.     NTMS_OPREQ_MESSAGE            = 5
  777. };
  778.  
  779. enum NtmsOpreqState {
  780.     NTMS_OPSTATE_UNKNOWN        = 0,
  781.     NTMS_OPSTATE_SUBMITTED        = 1,
  782.     NTMS_OPSTATE_ACTIVE            = 2,
  783.     NTMS_OPSTATE_INPROGRESS        = 3,
  784.     NTMS_OPSTATE_REFUSED        = 4,
  785.     NTMS_OPSTATE_COMPLETE        = 5
  786. };
  787.  
  788. #ifdef UNICODE
  789. #define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONW
  790. #define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONW
  791. #else
  792. #define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONA
  793. #define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONA
  794. #endif
  795.  
  796. typedef struct _NTMS_OPREQUESTINFORMATIONA {
  797.     DWORD        Request;
  798.     SYSTEMTIME    Submitted;
  799.     DWORD        State;
  800.     CHAR        szMessage[NTMS_MESSAGE_LENGTH];
  801.     DWORD        Arg1Type;
  802.     NTMS_GUID    Arg1;
  803.     DWORD        Arg2Type;
  804.     NTMS_GUID    Arg2;
  805.     CHAR        szApplication[NTMS_APPLICATIONNAME_LENGTH];
  806.     CHAR        szUser[NTMS_USERNAME_LENGTH];
  807.     CHAR        szComputer[NTMS_COMPUTERNAME_LENGTH];
  808. } NTMS_OPREQUESTINFORMATIONA;
  809.  
  810. typedef struct _NTMS_OPREQUESTINFORMATIONW {
  811.     DWORD        Request;
  812.     SYSTEMTIME    Submitted;
  813.     DWORD        State;
  814.     WCHAR        szMessage[NTMS_MESSAGE_LENGTH];
  815.     DWORD        Arg1Type;
  816.     NTMS_GUID    Arg1;
  817.     DWORD        Arg2Type;
  818.     NTMS_GUID    Arg2;
  819.     WCHAR        szApplication[NTMS_APPLICATIONNAME_LENGTH];
  820.     WCHAR        szUser[NTMS_USERNAME_LENGTH];
  821.     WCHAR        szComputer[NTMS_COMPUTERNAME_LENGTH];
  822. } NTMS_OPREQUESTINFORMATIONW;
  823.  
  824. #define NTMS_OBJECTNAME_LENGTH    64
  825. #define NTMS_DESCRIPTION_LENGTH 127
  826.  
  827. #ifdef UNICODE
  828. #define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONW
  829. #define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONW
  830. #define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONW
  831. #else
  832. #define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONA
  833. #define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONA
  834. #define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONA
  835. #endif
  836.  
  837. enum NtmsOperationalState {
  838.     NTMS_READY  = 0,
  839.     NTMS_NEEDS_SERVICE = 20,
  840.     NTMS_NOT_PRESENT = 21
  841. };
  842.  
  843. typedef struct _NTMS_OBJECTINFORMATIONA {
  844.     DWORD        dwSize;
  845.     DWORD        dwType;
  846.     SYSTEMTIME    Created;
  847.     SYSTEMTIME    Modified;
  848.     NTMS_GUID    ObjectGuid;
  849.     BOOL        Enabled;
  850.     DWORD        dwOperationalState;
  851.     CHAR        szName[NTMS_OBJECTNAME_LENGTH];
  852.     CHAR        szDescription[NTMS_DESCRIPTION_LENGTH];
  853. #ifdef MIDL_PASS
  854.     [switch_is(dwType)] union {
  855.         [case(NTMS_DRIVE)]             NTMS_DRIVEINFORMATIONA Drive;
  856.         [case(NTMS_DRIVE_TYPE)]        NTMS_DRIVETYPEINFORMATIONA DriveType;
  857.         [case(NTMS_LIBRARY)]        NTMS_LIBRARYINFORMATION Library;
  858.         [case(NTMS_CHANGER)]        NTMS_CHANGERINFORMATIONA Changer;
  859.         [case(NTMS_CHANGER_TYPE)]    NTMS_CHANGERTYPEINFORMATIONA ChangerType;
  860.         [case(NTMS_STORAGESLOT)]    NTMS_STORAGESLOTINFORMATION StorageSlot;
  861.         [case(NTMS_IEDOOR)]            NTMS_IEDOORINFORMATION IEDoor;
  862.         [case(NTMS_IEPORT)]            NTMS_IEPORTINFORMATION IEPort;
  863.         [case(NTMS_PHYSICAL_MEDIA)]    NTMS_PMIDINFORMATIONA PhysicalMedia;
  864.         [case(NTMS_LOGICAL_MEDIA)]    NTMS_LMIDINFORMATION LogicalMedia;
  865.         [case(NTMS_PARTITION)]        NTMS_PARTITIONINFORMATIONA Partition;
  866.         [case(NTMS_MEDIA_POOL)]        NTMS_MEDIAPOOLINFORMATION MediaPool;
  867.         [case(NTMS_MEDIA_TYPE)]        NTMS_MEDIATYPEINFORMATION MediaType;
  868.         [case(NTMS_LIBREQUEST)]        NTMS_LIBREQUESTINFORMATIONA LibRequest;
  869.         [case(NTMS_OPREQUEST)]        NTMS_OPREQUESTINFORMATIONA OpRequest;
  870.         [default]                    ;
  871.     } Info;
  872. #else
  873.     union {
  874.         NTMS_DRIVEINFORMATIONA Drive;
  875.         NTMS_DRIVETYPEINFORMATIONA DriveType;
  876.         NTMS_LIBRARYINFORMATION Library;
  877.         NTMS_CHANGERINFORMATIONA Changer;
  878.         NTMS_CHANGERTYPEINFORMATIONA ChangerType;
  879.         NTMS_STORAGESLOTINFORMATION StorageSlot;
  880.         NTMS_IEDOORINFORMATION IEDoor;
  881.         NTMS_IEPORTINFORMATION IEPort;
  882.         NTMS_PMIDINFORMATIONA PhysicalMedia;
  883.         NTMS_LMIDINFORMATION LogicalMedia;
  884.         NTMS_PARTITIONINFORMATIONA Partition;
  885.         NTMS_MEDIAPOOLINFORMATION MediaPool;
  886.         NTMS_MEDIATYPEINFORMATION MediaType;
  887.         NTMS_LIBREQUESTINFORMATIONA LibRequest;
  888.         NTMS_OPREQUESTINFORMATIONA OpRequest;
  889.     } Info;
  890. #endif    // MIDL_PASS
  891. } NTMS_OBJECTINFORMATIONA, *LPNTMS_OBJECTINFORMATIONA;
  892.  
  893.  
  894. typedef struct _NTMS_OBJECTINFORMATIONW {
  895.     DWORD        dwSize;
  896.     DWORD        dwType;
  897.     SYSTEMTIME    Created;
  898.     SYSTEMTIME    Modified;
  899.     NTMS_GUID    ObjectGuid;
  900.     BOOL        Enabled;
  901.     DWORD        dwOperationalState;
  902.     WCHAR        szName[NTMS_OBJECTNAME_LENGTH];
  903.     WCHAR        szDescription[NTMS_DESCRIPTION_LENGTH];
  904. #ifdef MIDL_PASS
  905.     [switch_is(dwType)] union {
  906.         [case(NTMS_DRIVE)]             NTMS_DRIVEINFORMATIONW Drive;
  907.         [case(NTMS_DRIVE_TYPE)]        NTMS_DRIVETYPEINFORMATIONW DriveType;
  908.         [case(NTMS_LIBRARY)]        NTMS_LIBRARYINFORMATION Library;
  909.         [case(NTMS_CHANGER)]        NTMS_CHANGERINFORMATIONW Changer;
  910.         [case(NTMS_CHANGER_TYPE)]    NTMS_CHANGERTYPEINFORMATIONW ChangerType;
  911.         [case(NTMS_STORAGESLOT)]    NTMS_STORAGESLOTINFORMATION StorageSlot;
  912.         [case(NTMS_IEDOOR)]            NTMS_IEDOORINFORMATION IEDoor;
  913.         [case(NTMS_IEPORT)]            NTMS_IEPORTINFORMATION IEPort;
  914.         [case(NTMS_PHYSICAL_MEDIA)]    NTMS_PMIDINFORMATIONW PhysicalMedia;
  915.         [case(NTMS_LOGICAL_MEDIA)]    NTMS_LMIDINFORMATION LogicalMedia;
  916.         [case(NTMS_PARTITION)]        NTMS_PARTITIONINFORMATIONW Partition;
  917.         [case(NTMS_MEDIA_POOL)]        NTMS_MEDIAPOOLINFORMATION MediaPool;
  918.         [case(NTMS_MEDIA_TYPE)]        NTMS_MEDIATYPEINFORMATION MediaType;
  919.         [case(NTMS_LIBREQUEST)]        NTMS_LIBREQUESTINFORMATIONW LibRequest;
  920.         [case(NTMS_OPREQUEST)]        NTMS_OPREQUESTINFORMATIONW OpRequest;
  921.         [default]                    ;
  922.     } Info;
  923. #else
  924.     union {
  925.         NTMS_DRIVEINFORMATIONW Drive;
  926.         NTMS_DRIVETYPEINFORMATIONW DriveType;
  927.         NTMS_LIBRARYINFORMATION Library;
  928.         NTMS_CHANGERINFORMATIONW Changer;
  929.         NTMS_CHANGERTYPEINFORMATIONW ChangerType;
  930.         NTMS_STORAGESLOTINFORMATION StorageSlot;
  931.         NTMS_IEDOORINFORMATION IEDoor;
  932.         NTMS_IEPORTINFORMATION IEPort;
  933.         NTMS_PMIDINFORMATIONW PhysicalMedia;
  934.         NTMS_LMIDINFORMATION LogicalMedia;
  935.         NTMS_PARTITIONINFORMATIONW Partition;
  936.         NTMS_MEDIAPOOLINFORMATION MediaPool;
  937.         NTMS_MEDIATYPEINFORMATION MediaType;
  938.         NTMS_LIBREQUESTINFORMATIONW LibRequest;
  939.         NTMS_OPREQUESTINFORMATIONW OpRequest;
  940.     } Info;
  941. #endif    // MIDL_PASS
  942. } NTMS_OBJECTINFORMATIONW, *LPNTMS_OBJECTINFORMATIONW;
  943.  
  944. #endif    // NTMS_NOREDEF
  945.  
  946. #ifndef MIDL_PASS
  947. //======================================================================
  948. // OBJECT MANAGEMENT APIS
  949. //======================================================================
  950. #ifdef PRE_SEVIL
  951. DWORD WINAPI GetNtmsObjectInformation(
  952.     HANDLE hSession,
  953.     LPNTMS_GUID lpObjectId,
  954.     LPNTMS_OBJECTINFORMATION lpInfo
  955.     );
  956.  
  957. DWORD WINAPI SetNtmsObjectInformation(
  958.     HANDLE hSession,
  959.     LPNTMS_GUID lpObjectId,
  960.     LPNTMS_OBJECTINFORMATION lpInfo
  961.     );
  962. #endif
  963. // Added by SEvilia
  964. DWORD WINAPI GetNtmsObjectInformationA(
  965.     HANDLE hSession,
  966.     LPNTMS_GUID lpObjectId,
  967.     LPNTMS_OBJECTINFORMATIONA lpInfo
  968.     );
  969.  
  970. DWORD WINAPI GetNtmsObjectInformationW(
  971.     HANDLE hSession,
  972.     LPNTMS_GUID lpObjectId,
  973.     LPNTMS_OBJECTINFORMATIONW lpInfo
  974.     );
  975.  
  976. DWORD WINAPI SetNtmsObjectInformationA(
  977.     HANDLE hSession,
  978.     LPNTMS_GUID lpObjectId,
  979.     LPNTMS_OBJECTINFORMATIONA lpInfo
  980.     );
  981.  
  982. DWORD WINAPI SetNtmsObjectInformationW(
  983.     HANDLE hSession,
  984.     LPNTMS_GUID lpObjectId,
  985.     LPNTMS_OBJECTINFORMATIONW lpInfo
  986.     );
  987. // END of SEVILIA
  988.  
  989. DWORD WINAPI EnumerateNtmsObject(
  990.     HANDLE hSession,
  991.     const LPNTMS_GUID lpContainerId,
  992.     LPNTMS_GUID lpList,
  993.     LPDWORD lpdwListSize,
  994.     DWORD dwType,
  995.     DWORD dwOptions
  996.     );
  997.  
  998. DWORD WINAPI DisableNtmsObject(
  999.     HANDLE hSession,
  1000.     DWORD dwType,
  1001.     LPNTMS_GUID lpObjectId
  1002.     );
  1003.  
  1004. DWORD WINAPI EnableNtmsObject(
  1005.     HANDLE hSession,
  1006.     DWORD dwType,
  1007.     LPNTMS_GUID lpObjectId
  1008.     );
  1009.  
  1010. enum NtmsEjectOperation {
  1011.     NTMS_EJECT_START    = 0,
  1012.     NTMS_EJECT_STOP        = 1
  1013. };
  1014.  
  1015. DWORD WINAPI EjectNtmsMedia(
  1016.     HANDLE hSession,
  1017.     LPNTMS_GUID lpMediaId,
  1018.     LPNTMS_GUID lpEjectOperation,
  1019.     DWORD dwAction
  1020.     );
  1021.  
  1022. enum NtmsInjectOperation {
  1023.     NTMS_INJECT_START    = 0,
  1024.     NTMS_INJECT_STOP        = 1
  1025. };
  1026.  
  1027. DWORD WINAPI InjectNtmsMedia(
  1028.     HANDLE hSession,
  1029.     LPNTMS_GUID lpLibraryId,
  1030.     LPNTMS_GUID lpInjectOperation,
  1031.     DWORD dwAction
  1032.     );
  1033.  
  1034. DWORD WINAPI AccessNtmsLibraryDoor(
  1035.     HANDLE hSession,
  1036.     LPNTMS_GUID lpLibraryId,
  1037.     DWORD dwAction
  1038.     );
  1039.  
  1040. DWORD WINAPI CleanNtmsDrive(
  1041.     HANDLE hSession,
  1042.     LPNTMS_GUID lpDriveId
  1043.     );
  1044.  
  1045. DWORD WINAPI DismountNtmsDrive(
  1046.     HANDLE hSession,
  1047.     LPNTMS_GUID lpDriveId
  1048.     );
  1049.  
  1050. DWORD WINAPI InventoryNtmsLibrary(
  1051.     HANDLE hSession,
  1052.     LPNTMS_GUID lpLibraryId,
  1053.     DWORD dwAction
  1054.     );
  1055.  
  1056. // definitions for the UpdateNtmsOmidInfo ...
  1057. #define NTMS_OMID_TYPE_RAW_LABEL    0x01
  1058. #define NTMS_OMID_TYPE_FILESYSTEM_INFO  0x02
  1059.  
  1060. typedef struct 
  1061. {
  1062.     WCHAR FileSystemType[64] ;
  1063.     WCHAR VolumeName[256] ;
  1064.     DWORD SerialNumber ;
  1065. } NTMS_FILESYSTEM_INFO ;
  1066.  
  1067. DWORD WINAPI UpdateNtmsOmidInfo( 
  1068.     HANDLE hSession, 
  1069.     LPNTMS_GUID lpMediaId,
  1070.     DWORD labelType,
  1071.     DWORD numberOfBytes,
  1072.     LPVOID lpBuffer
  1073.     );
  1074.  
  1075. DWORD WINAPI CancelNtmsLibraryRequest(
  1076.     HANDLE hSession,
  1077.     LPNTMS_GUID lpRequestId
  1078.     );
  1079.  
  1080. DWORD WINAPI ReserveNtmsCleanerSlot ( 
  1081.     HANDLE hSession, 
  1082.     LPNTMS_GUID lpLibrary,
  1083.     LPNTMS_GUID lpSlot
  1084.     );
  1085.  
  1086. DWORD WINAPI ReleaseNtmsCleanerSlot ( 
  1087.     HANDLE hSession, 
  1088.     LPNTMS_GUID lpLibrary
  1089.     );
  1090.  
  1091. DWORD WINAPI InjectNtmsCleaner ( 
  1092.     HANDLE hSession, 
  1093.     LPNTMS_GUID lpLibrary,
  1094.     LPNTMS_GUID lpInjectOperation,
  1095.     DWORD dwNumberOfCleansLeft,
  1096.     DWORD dwAction
  1097.     );
  1098.  
  1099. DWORD WINAPI EjectNtmsCleaner ( 
  1100.     HANDLE hSession, 
  1101.     LPNTMS_GUID lpLibrary,
  1102.     LPNTMS_GUID lpEjectOperation,
  1103.     DWORD dwAction
  1104.     );
  1105.  
  1106. #endif    // MIDL_PASS
  1107.  
  1108. #ifndef NTMS_NOREDEF
  1109. enum NtmsDriveType {
  1110.     NTMS_UNKNOWN_DRIVE = 0    
  1111. };
  1112.  
  1113. #endif    // NTMS_NOREDEF
  1114.  
  1115. #ifndef MIDL_PASS
  1116. // Security for NTMS API
  1117. DWORD WINAPI GetNtmsObjectSecurity(
  1118.     HANDLE hSession,
  1119.     LPNTMS_GUID lpObjectId,
  1120.     DWORD dwType,
  1121.     SECURITY_INFORMATION RequestedInformation,
  1122.     PSECURITY_DESCRIPTOR lpSecurityDescriptor,
  1123.     DWORD nLength,
  1124.     LPDWORD lpnLengthNeeded
  1125.     );
  1126.     
  1127. DWORD WINAPI SetNtmsObjectSecurity(
  1128.     HANDLE hSession,
  1129.     LPNTMS_GUID lpObjectId,
  1130.     DWORD dwType,
  1131.     SECURITY_INFORMATION SecurityInformation,
  1132.     PSECURITY_DESCRIPTOR lpSecurityDescriptor
  1133.     );
  1134.  
  1135. // Security Access Control Masks :
  1136. // NTMS_USE_ACCESS is required to use an NTMS object.  For example,
  1137. // you will need this access to a library in order to mount media
  1138. // within it.
  1139. // NTMS_MODIFY_ACCESS is required to make changes to an NTMS object.
  1140. // For example, you will need modify access in order to change the name
  1141. // of an object or change its attributes.
  1142. // NTMS_CONTROL_ACCESS is required to control an NTMS object.  For
  1143. // example, you will need control access to a library in order to 
  1144. // inject media, eject media, clean or open the door.
  1145. //
  1146. enum NtmsAccessMask {
  1147.     NTMS_USE_ACCESS        = 0x1,
  1148.     NTMS_MODIFY_ACCESS    = 0x2,
  1149.     NTMS_CONTROL_ACCESS    = 0x4
  1150. };
  1151.  
  1152. // Generic Mappings :
  1153. #define NTMS_GENERIC_READ    NTMS_USE_ACCESS
  1154. #define NTMS_GENERIC_WRITE   NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS
  1155. #define NTMS_GENERIC_EXECUTE NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS
  1156. #define NTMS_GENERIC_ALL     NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS
  1157.  
  1158. // Maximum attribute size for NTMS Object attribute API's
  1159. #define NTMS_MAXATTR_LENGTH 0x10000
  1160.  
  1161. // Object extensions for NTMS API
  1162. DWORD WINAPI GetNtmsObjectAttributeA( 
  1163.     HANDLE hSession,
  1164.     LPNTMS_GUID lpObjectId,
  1165.     DWORD dwType,
  1166.     LPCSTR lpAttributeName,
  1167.     LPVOID lpAttributeData,
  1168.     LPDWORD lpAttributeSize
  1169.     );
  1170.  
  1171. DWORD WINAPI GetNtmsObjectAttributeW( 
  1172.     HANDLE hSession,
  1173.     LPNTMS_GUID lpObjectId,
  1174.     DWORD dwType,
  1175.     LPCWSTR lpAttributeName,
  1176.     LPVOID lpAttributeData,
  1177.     LPDWORD lpAttributeSize
  1178.     );
  1179.  
  1180. DWORD WINAPI SetNtmsObjectAttributeA(
  1181.     HANDLE hSession,
  1182.     LPNTMS_GUID lpObjectId,
  1183.     DWORD dwType,
  1184.     LPCSTR lpAttributeName,
  1185.     LPVOID lpAttributeData,
  1186.     DWORD dwAttributeSize
  1187.     );
  1188.  
  1189. DWORD WINAPI SetNtmsObjectAttributeW(
  1190.     HANDLE hSession,
  1191.     LPNTMS_GUID lpObjectId,
  1192.     DWORD dwType,
  1193.     LPCWSTR lpAttributeName,
  1194.     LPVOID lpAttributeData,
  1195.     DWORD AttributeSize
  1196.     );
  1197.  
  1198. // Operator Requests
  1199. DWORD WINAPI SubmitNtmsOperatorRequestW( 
  1200.     HANDLE hSession,
  1201.     DWORD dwRequest,
  1202.     LPCWSTR lpMessage,
  1203.     LPNTMS_GUID lpArg1Id,
  1204.     LPNTMS_GUID lpArg2Id,
  1205.     LPNTMS_GUID lpRequestId
  1206.     );
  1207.  
  1208. DWORD WINAPI SubmitNtmsOperatorRequestA( 
  1209.     HANDLE hSession,
  1210.     DWORD dwRequest,
  1211.     LPCSTR lpMessage,
  1212.     LPNTMS_GUID lpArg1Id,
  1213.     LPNTMS_GUID lpArg2Id,
  1214.     LPNTMS_GUID lpRequestId
  1215.     );
  1216.  
  1217. DWORD WINAPI WaitForNtmsOperatorRequest( 
  1218.     HANDLE hSession,
  1219.     LPNTMS_GUID lpRequestId,
  1220.     DWORD dwTimeout
  1221.     );
  1222.  
  1223. DWORD WINAPI CancelNtmsOperatorRequest(
  1224.     HANDLE hSession,
  1225.     LPNTMS_GUID lpRequestId
  1226.     );
  1227.  
  1228. DWORD WINAPI SatisfyNtmsOperatorRequest(
  1229.     HANDLE hSession,
  1230.     LPNTMS_GUID lpRequestId
  1231.     );
  1232.  
  1233. #endif    // MIDL_PASS
  1234.  
  1235. #ifndef NTMS_NOREDEF
  1236.  
  1237. enum NtmsNotificationOperations {
  1238.     NTMS_OBJ_UPDATE = 1,
  1239.     NTMS_OBJ_INSERT = 2,
  1240.     NTMS_OBJ_DELETE = 3
  1241. };
  1242.  
  1243. // object notification
  1244. typedef struct _NTMS_NOTIFICATIONINFORMATION {
  1245.     DWORD dwOperation;
  1246.     NTMS_GUID ObjectId;
  1247. } NTMS_NOTIFICATIONINFORMATION, *LPNTMS_NOTIFICATIONINFORMATION;
  1248.  
  1249. #endif    // NTMS_NOREDEF
  1250.  
  1251. #ifndef MIDL_PASS
  1252.  
  1253. DWORD WINAPI ImportNtmsDatabase(
  1254.     HANDLE hSession
  1255.     );
  1256.  
  1257. DWORD WINAPI ExportNtmsDatabase(
  1258.     HANDLE hSession
  1259.     );
  1260.  
  1261. #endif    // MIDL_PASS
  1262.  
  1263. #ifndef MIDL_PASS
  1264.  
  1265. HANDLE WINAPI OpenNtmsNotification( 
  1266.     HANDLE hSession,
  1267.     DWORD dwType
  1268.     );
  1269.  
  1270. DWORD WINAPI WaitForNtmsNotification( 
  1271. //    HANDLE hSession,                    //SEVILIA
  1272.     HANDLE hNotification,
  1273.     LPNTMS_NOTIFICATIONINFORMATION lpNotificationInformation,
  1274.     DWORD dwTimeout
  1275.     );
  1276.  
  1277. DWORD WINAPI CloseNtmsNotification( 
  1278. //    HANDLE hSession,                    //SEVILIA
  1279.     HANDLE hNotification
  1280.     );
  1281.  
  1282. #endif    // MIDL_PASS
  1283.  
  1284. #ifdef __cplusplus
  1285. } // end extern "C"
  1286. #endif
  1287.  
  1288. #pragma pack()
  1289.  
  1290. #pragma option pop /*P_O_Pop*/
  1291. #endif // _INCL_NTMSAPI_H_
  1292.