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