|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved
Module Name:
ntmsapi.h
Abstract:
This module contains the RSM API prototypes and public definitions supported in the API The RSM API provides a "C" interface to RSM This file can be included in C and C++ code
This file's name is historical. RSM began life as NTMS
--*/
#ifndef _INCL_NTMSAPI_H_
#define _INCL_NTMSAPI_H_
#if _MSC_VER > 1000
#pragma once
#endif
#pragma pack(8)
#ifdef __cplusplus
extern "C" { #endif
typedef GUID NTMS_GUID; typedef GUID* LPNTMS_GUID;
#define NTMS_NULLGUID {0,0,0,{0,0,0,0,0,0,0,0}}
#define NTMS_IS_NULLGUID(id) ((id.Data1==0)&&(id.Data2==0)&&(id.Data3==0)&&\
(id.Data4[0]==0)&&(id.Data4[1]==0)&&(id.Data4[2]==0)&&\ (id.Data4[3]==0)&&(id.Data4[4]==0)&&(id.Data4[5]==0)&&\ (id.Data4[6]==0)&&(id.Data4[7]==0))
//
// Define unicode/ascii specific functions
// This include functions that get strings
//
#ifdef UNICODE
#define OpenNtmsSession OpenNtmsSessionW
#define GetNtmsDeviceName GetNtmsDeviceNameW
#define GetNtmsObjectInformation GetNtmsObjectInformationW
#define SetNtmsObjectInformation SetNtmsObjectInformationW
#define CreateNtmsMediaPool CreateNtmsMediaPoolW
#define GetNtmsMediaPoolName GetNtmsMediaPoolNameW
#define GetNtmsObjectAttribute GetNtmsObjectAttributeW
#define SetNtmsObjectAttribute SetNtmsObjectAttributeW
#define GetNtmsUIOptions GetNtmsUIOptionsW
#define SetNtmsUIOptions SetNtmsUIOptionsW
#define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestW
#define CreateNtmsMedia CreateNtmsMediaW
#define EjectDiskFromSADrive EjectDiskFromSADriveW
#define GetVolumesFromDrive GetVolumesFromDriveW
#else
#define OpenNtmsSession OpenNtmsSessionA
#define GetNtmsDeviceName GetNtmsDeviceNameA
#define GetNtmsObjectInformation GetNtmsObjectInformationA
#define SetNtmsObjectInformation SetNtmsObjectInformationA
#define CreateNtmsMediaPool CreateNtmsMediaPoolA
#define GetNtmsMediaPoolName GetNtmsMediaPoolNameA
#define GetNtmsObjectAttribute GetNtmsObjectAttributeA
#define SetNtmsObjectAttribute SetNtmsObjectAttributeA
#define GetNtmsUIOptions GetNtmsUIOptionsA
#define SetNtmsUIOptions SetNtmsUIOptionsA
#define SubmitNtmsOperatorRequest SubmitNtmsOperatorRequestA
#define CreateNtmsMedia CreateNtmsMediaA
#define EjectDiskFromSADrive EjectDiskFromSADriveA
#define GetVolumesFromDrive GetVolumesFromDriveA
#endif
#ifndef NTMS_NOREDEF
// WARNING : The object types are provided as an ordered list of NTMS
// database objects. Do NOT modify without also modifying the object
// metadata table in dbobmeta.cpp
enum NtmsObjectsTypes { NTMS_UNKNOWN = 0, NTMS_OBJECT, NTMS_CHANGER, NTMS_CHANGER_TYPE, NTMS_COMPUTER, NTMS_DRIVE, NTMS_DRIVE_TYPE, NTMS_IEDOOR, NTMS_IEPORT, NTMS_LIBRARY, NTMS_LIBREQUEST, NTMS_LOGICAL_MEDIA, NTMS_MEDIA_POOL, NTMS_MEDIA_TYPE, NTMS_PARTITION, NTMS_PHYSICAL_MEDIA, NTMS_STORAGESLOT, NTMS_OPREQUEST, NTMS_UI_DESTINATION,
NTMS_NUMBER_OF_OBJECT_TYPES };
// async i/o defined for future implementation
typedef struct _NTMS_ASYNC_IO { NTMS_GUID OperationId; // reserved - do not use
NTMS_GUID EventId; // reserved - do not use
DWORD dwOperationType; // reserved - do not use
DWORD dwResult; // completion status
DWORD dwAsyncState; // current state of request
#ifdef MIDL_PASS
NTMS_HANDLE hEvent; #else
HANDLE hEvent; // event handle to signal on status change
#endif // or request completion
BOOL bOnStateChange; // indicate to signal on status change also
} NTMS_ASYNC_IO, *LPNTMS_ASYNC_IO;
enum NtmsAsyncStatus { NTMS_ASYNCSTATE_QUEUED = 0, // initial state is queued
NTMS_ASYNCSTATE_WAIT_RESOURCE, NTMS_ASYNCSTATE_WAIT_OPERATOR, NTMS_ASYNCSTATE_INPROCESS, NTMS_ASYNCSTATE_COMPLETE // complete, check result code
};
enum NtmsAsyncOperations { NTMS_ASYNCOP_MOUNT = 1 // mount operation
};
#endif // NTMS_NOREDEF
//=======================================================================
// SESSION ESTABLISHMENT
//=======================================================================
#ifndef MIDL_PASS
enum NtmsSessionOptions { NTMS_SESSION_QUERYEXPEDITE = 0x1 };
HANDLE WINAPI OpenNtmsSessionW( LPCWSTR lpServer, LPCWSTR lpApplication, DWORD dwOptions );
HANDLE WINAPI OpenNtmsSessionA( LPCSTR lpServer, LPCSTR lpApplication, DWORD dwOptions );
DWORD WINAPI CloseNtmsSession( HANDLE hSession );
#endif // MIDL_PASS
#ifndef NTMS_NOREDEF
//=======================================================================
// MOUNT DEFINITIONS
//=======================================================================
enum NtmsMountOptions { NTMS_MOUNT_READ = 0x0001, NTMS_MOUNT_WRITE = 0x0002, NTMS_MOUNT_ERROR_NOT_AVAILABLE = 0x0004, NTMS_MOUNT_ERROR_IF_UNAVAILABLE = 0x0004, NTMS_MOUNT_ERROR_OFFLINE = 0x0008, NTMS_MOUNT_ERROR_IF_OFFLINE = 0x0008, NTMS_MOUNT_SPECIFIC_DRIVE = 0x0010, NTMS_MOUNT_NOWAIT = 0x0020 };
enum NtmsDismountOptions { NTMS_DISMOUNT_DEFERRED = 0x0001, NTMS_DISMOUNT_IMMEDIATE = 0x0002 };
enum NtmsMountPriority { NTMS_PRIORITY_DEFAULT = 0, NTMS_PRIORITY_HIGHEST = 15, NTMS_PRIORITY_HIGH = 7, NTMS_PRIORITY_NORMAL = 0, NTMS_PRIORITY_LOW = -7, NTMS_PRIORITY_LOWEST = -15 };
typedef struct _NTMS_MOUNT_INFORMATION { DWORD dwSize; // size of structure
#ifdef MIDL_PASS
[ptr] LPNTMS_ASYNC_IO lpReserved; #else
LPVOID lpReserved; #endif
} NTMS_MOUNT_INFORMATION, *LPNTMS_MOUNT_INFORMATION;
#endif // NTMS_NOREDEF
//=======================================================================
// MOUNT AND DISMOUNT APIS
//=======================================================================
#ifndef MIDL_PASS
DWORD WINAPI MountNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpDriveId, DWORD dwCount, DWORD dwOptions, int dwPriority, DWORD dwTimeout, LPNTMS_MOUNT_INFORMATION lpMountInformation );
DWORD WINAPI DismountNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, DWORD dwCount, DWORD dwOptions );
#endif // MIDL_PASS
#ifndef NTMS_NOREDEF
//=======================================================================
// ALLOCATE DEFINITIONS
//=======================================================================
enum NtmsAllocateOptions { NTMS_ALLOCATE_NEW = 0x0001, NTMS_ALLOCATE_NEXT = 0x0002, NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE = 0x0004 };
typedef struct _NTMS_ALLOCATION_INFORMATION { DWORD dwSize; // size of structure
#ifdef MIDL_PASS
[ptr] LPNTMS_ASYNC_IO lpReserved; // future async io control
#else
LPVOID lpReserved; #endif
NTMS_GUID AllocatedFrom; // original source of media (scratch pool, app pool, import etc).
} NTMS_ALLOCATION_INFORMATION, *LPNTMS_ALLOCATION_INFORMATION;
#endif
//=======================================================================
// ALLOCATE AND DEALLOCATE APIS
//=======================================================================
#ifndef MIDL_PASS
DWORD WINAPI AllocateNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaPool, LPNTMS_GUID lpPartition, // optional
LPNTMS_GUID lpMediaId, // OUTPUT, media id or operator request id
DWORD dwOptions, DWORD dwTimeout, LPNTMS_ALLOCATION_INFORMATION lpAllocateInformation );
DWORD WINAPI DeallocateNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, DWORD dwOptions );
DWORD WINAPI SwapNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId1, LPNTMS_GUID lpMediaId2 );
DWORD WINAPI AddNtmsMediaType( HANDLE hSession, LPNTMS_GUID lpMediaTypeId, LPNTMS_GUID lpLibId );
DWORD WINAPI DeleteNtmsMediaType( HANDLE hSession, LPNTMS_GUID lpMediaTypeId, LPNTMS_GUID lpLibId );
DWORD WINAPI ChangeNtmsMediaType( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpPoolId );
//=======================================================================
// MEDIA STATES
//=======================================================================
DWORD WINAPI DecommissionNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId );
DWORD WINAPI SetNtmsMediaComplete( HANDLE hSession, LPNTMS_GUID lpMediaId );
DWORD WINAPI DeleteNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId );
#endif // MIDL_PASS
#ifndef NTMS_NOREDEF
//=======================================================================
// MEDIA POOLS
//=======================================================================
enum NtmsCreateOptions { NTMS_OPEN_EXISTING = 0x0001, NTMS_CREATE_NEW = 0x0002, NTMS_OPEN_ALWAYS = 0x0003 };
#endif // NTMS_NOREDEF
#ifndef MIDL_PASS
#ifdef PRE_SEVIL
DWORD WINAPI CreateNtmsMediaPool( HANDLE hSession, LPCTSTR lpPoolName, LPNTMS_GUID lpMediaType, DWORD dwAction, LPSECURITY_ATTRIBUTES lpSecurityAttributes, LPNTMS_GUID lpPoolId // OUT
);
#endif
// SEVILIA
DWORD WINAPI CreateNtmsMediaPoolA( HANDLE hSession, LPCSTR lpPoolName, LPNTMS_GUID lpMediaType, DWORD dwAction, LPSECURITY_ATTRIBUTES lpSecurityAttributes, LPNTMS_GUID lpPoolId // OUT
);
DWORD WINAPI CreateNtmsMediaPoolW( HANDLE hSession, LPCWSTR lpPoolName, LPNTMS_GUID lpMediaType, DWORD dwAction, LPSECURITY_ATTRIBUTES lpSecurityAttributes, LPNTMS_GUID lpPoolId // OUT
);
DWORD WINAPI GetNtmsMediaPoolNameA( HANDLE hSession, LPNTMS_GUID lpPoolId, LPSTR lpBufName, LPDWORD lpdwNameSize );
DWORD WINAPI GetNtmsMediaPoolNameW( HANDLE hSession, LPNTMS_GUID lpPoolId, LPWSTR lpBufName, LPDWORD lpdwNameSize );
DWORD WINAPI MoveToNtmsMediaPool( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpPoolId );
DWORD WINAPI DeleteNtmsMediaPool( HANDLE hSession, LPNTMS_GUID lpPoolId );
DWORD WINAPI DeleteNtmsLibrary( HANDLE hSession, LPNTMS_GUID lpLibraryId );
DWORD WINAPI DeleteNtmsDrive( HANDLE hSession, LPNTMS_GUID lpDriveId );
#endif // MIDL_PASS
#define NTMS_OBJECTNAME_LENGTH 64
#define NTMS_DESCRIPTION_LENGTH 127
#define NTMS_DEVICENAME_LENGTH 64
#define NTMS_SERIALNUMBER_LENGTH 32
#define NTMS_REVISION_LENGTH 32
#define NTMS_BARCODE_LENGTH 64
#define NTMS_SEQUENCE_LENGTH 32
#define NTMS_VENDORNAME_LENGTH 128
#define NTMS_PRODUCTNAME_LENGTH 128
#define NTMS_USERNAME_LENGTH 64
#define NTMS_APPLICATIONNAME_LENGTH 64
#define NTMS_COMPUTERNAME_LENGTH 64
#define NTMS_I1_MESSAGE_LENGTH 127
#define NTMS_MESSAGE_LENGTH 256
#define NTMS_POOLHIERARCHY_LENGTH 512
#define NTMS_OMIDLABELID_LENGTH 255
#define NTMS_OMIDLABELTYPE_LENGTH 64
#define NTMS_OMIDLABELINFO_LENGTH 256
#ifndef NTMS_NOREDEF
//======================================================================
// OBJECT INFORMATION STRUCTURES
//======================================================================
enum NtmsDriveState { NTMS_DRIVESTATE_DISMOUNTED = 0, NTMS_DRIVESTATE_MOUNTED = 1, NTMS_DRIVESTATE_LOADED = 2, NTMS_DRIVESTATE_UNLOADED = 5, NTMS_DRIVESTATE_BEING_CLEANED = 6, NTMS_DRIVESTATE_DISMOUNTABLE = 7 };
#ifdef UNICODE
#define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONW
#define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONW
#else
#define _NTMS_DRIVEINFORMATION _NTMS_DRIVEINFORMATIONA
#define NTMS_DRIVEINFORMATION NTMS_DRIVEINFORMATIONA
#endif
typedef struct _NTMS_DRIVEINFORMATIONA { DWORD Number; DWORD State; NTMS_GUID DriveType; CHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; CHAR szRevision[NTMS_REVISION_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; DWORD dwMountCount; SYSTEMTIME LastCleanedTs; NTMS_GUID SavedPartitionId; NTMS_GUID Library; GUID Reserved; DWORD dwDeferDismountDelay; } NTMS_DRIVEINFORMATIONA;
typedef struct _NTMS_DRIVEINFORMATIONW { DWORD Number; DWORD State; NTMS_GUID DriveType; WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; WCHAR szRevision[NTMS_REVISION_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; DWORD dwMountCount; SYSTEMTIME LastCleanedTs; NTMS_GUID SavedPartitionId; NTMS_GUID Library; GUID Reserved; DWORD dwDeferDismountDelay; } NTMS_DRIVEINFORMATIONW;
enum NtmsLibraryType { NTMS_LIBRARYTYPE_UNKNOWN = 0, NTMS_LIBRARYTYPE_OFFLINE = 1, NTMS_LIBRARYTYPE_ONLINE = 2, NTMS_LIBRARYTYPE_STANDALONE = 3 };
// library flags
enum NtmsLibraryFlags { NTMS_LIBRARYFLAG_FIXEDOFFLINE = 0x01, NTMS_LIBRARYFLAG_CLEANERPRESENT = 0x02, NTMS_LIBRARYFLAG_AUTODETECTCHANGE = 0x04, NTMS_LIBRARYFLAG_IGNORECLEANERUSESREMAINING = 0x08, NTMS_LIBRARYFLAG_RECOGNIZECLEANERBARCODE = 0x10 };
enum NtmsInventoryMethod { NTMS_INVENTORY_NONE = 0, NTMS_INVENTORY_FAST = 1, NTMS_INVENTORY_OMID = 2, NTMS_INVENTORY_DEFAULT = 3, NTMS_INVENTORY_SLOT = 4, NTMS_INVENTORY_STOP = 5, NTMS_INVENTORY_MAX };
typedef struct _NTMS_LIBRARYINFORMATION { DWORD LibraryType; NTMS_GUID CleanerSlot; NTMS_GUID CleanerSlotDefault; BOOL LibrarySupportsDriveCleaning; BOOL BarCodeReaderInstalled; DWORD InventoryMethod; DWORD dwCleanerUsesRemaining; DWORD FirstDriveNumber; DWORD dwNumberOfDrives; DWORD FirstSlotNumber; DWORD dwNumberOfSlots; DWORD FirstDoorNumber; DWORD dwNumberOfDoors; DWORD FirstPortNumber; DWORD dwNumberOfPorts; DWORD FirstChangerNumber; DWORD dwNumberOfChangers; DWORD dwNumberOfMedia; DWORD dwNumberOfMediaTypes; DWORD dwNumberOfLibRequests; GUID Reserved; BOOL AutoRecovery; DWORD dwFlags; } NTMS_LIBRARYINFORMATION;
#ifdef UNICODE
#define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONW
#define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONW
#else
#define _NTMS_CHANGERINFORMATION _NTMS_CHANGERINFORMATIONA
#define NTMS_CHANGERINFORMATION NTMS_CHANGERINFORMATIONA
#endif
typedef struct _NTMS_CHANGERINFORMATIONA { DWORD Number; NTMS_GUID ChangerType; CHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; CHAR szRevision[NTMS_REVISION_LENGTH]; CHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; NTMS_GUID Library; } NTMS_CHANGERINFORMATIONA;
typedef struct _NTMS_CHANGERINFORMATIONW { DWORD Number; NTMS_GUID ChangerType; WCHAR szSerialNumber[NTMS_SERIALNUMBER_LENGTH]; WCHAR szRevision[NTMS_REVISION_LENGTH]; WCHAR szDeviceName[NTMS_DEVICENAME_LENGTH]; WORD ScsiPort; WORD ScsiBus; WORD ScsiTarget; WORD ScsiLun; NTMS_GUID Library; } NTMS_CHANGERINFORMATIONW;
enum NtmsSlotState { NTMS_SLOTSTATE_UNKNOWN = 0, NTMS_SLOTSTATE_FULL = 1, NTMS_SLOTSTATE_EMPTY = 2, NTMS_SLOTSTATE_NOTPRESENT = 3, NTMS_SLOTSTATE_NEEDSINVENTORY = 4 };
typedef struct _NTMS_STORAGESLOTINFORMATION { DWORD Number; DWORD State; NTMS_GUID Library; } NTMS_STORAGESLOTINFORMATION;
enum NtmsDoorState { NTMS_DOORSTATE_UNKNOWN = 0, NTMS_DOORSTATE_CLOSED = 1, NTMS_DOORSTATE_OPEN = 2 };
typedef struct _NTMS_IEDOORINFORMATION { DWORD Number; DWORD State; WORD MaxOpenSecs; NTMS_GUID Library; } NTMS_IEDOORINFORMATION;
enum NtmsPortPosition { NTMS_PORTPOSITION_UNKNOWN = 0, NTMS_PORTPOSITION_EXTENDED = 1, NTMS_PORTPOSITION_RETRACTED = 2 };
enum NtmsPortContent { NTMS_PORTCONTENT_UNKNOWN = 0, NTMS_PORTCONTENT_FULL = 1, NTMS_PORTCONTENT_EMPTY = 2 };
typedef struct _NTMS_IEPORTINFORMATION { DWORD Number; DWORD Content; DWORD Position; WORD MaxExtendSecs; NTMS_GUID Library; } NTMS_IEPORTINFORMATION;
enum NtmsBarCodeState { NTMS_BARCODESTATE_OK = 1, NTMS_BARCODESTATE_UNREADABLE = 2 };
enum NtmsMediaState { NTMS_MEDIASTATE_IDLE = 0, NTMS_MEDIASTATE_INUSE = 1, NTMS_MEDIASTATE_MOUNTED = 2, NTMS_MEDIASTATE_LOADED = 3, NTMS_MEDIASTATE_UNLOADED = 4, NTMS_MEDIASTATE_OPERROR = 5, // media is waiting for operator request servicing
NTMS_MEDIASTATE_OPREQ = 6 };
#ifdef UNICODE
#define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONW
#define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONW
#else
#define _NTMS_PMIDINFORMATION _NTMS_PMIDINFORMATIONA
#define NTMS_PMIDINFORMATION NTMS_PMIDINFORMATIONA
#endif
typedef struct _NTMS_PMIDINFORMATIONA { NTMS_GUID CurrentLibrary; // the current library
NTMS_GUID MediaPool; // media pool that the media belongs to
NTMS_GUID Location; // actual location of the media
DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media
CHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string
DWORD BarCodeState; // current state of the bar code
CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state
DWORD dwNumberOfPartitions; DWORD dwMediaTypeCode; DWORD dwDensityCode; NTMS_GUID MountedPartition; } NTMS_PMIDINFORMATIONA;
typedef struct _NTMS_PMIDINFORMATIONW { NTMS_GUID CurrentLibrary; // the current library
NTMS_GUID MediaPool; // media pool that the media belongs to
NTMS_GUID Location; // actual location of the media
DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media
WCHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string
DWORD BarCodeState; // current state of the bar code
WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state
DWORD dwNumberOfPartitions; DWORD dwMediaTypeCode; DWORD dwDensityCode; NTMS_GUID MountedPartition; } NTMS_PMIDINFORMATIONW;
typedef struct _NTMS_LMIDINFORMATION { NTMS_GUID MediaPool; DWORD dwNumberOfPartitions; } NTMS_LMIDINFORMATION;
enum NtmsPartitionState { NTMS_PARTSTATE_UNKNOWN = 0, NTMS_PARTSTATE_UNPREPARED = 1, NTMS_PARTSTATE_INCOMPATIBLE = 2, NTMS_PARTSTATE_DECOMMISSIONED = 3, NTMS_PARTSTATE_AVAILABLE = 4, NTMS_PARTSTATE_ALLOCATED = 5, NTMS_PARTSTATE_COMPLETE = 6, NTMS_PARTSTATE_FOREIGN = 7, NTMS_PARTSTATE_IMPORT = 8, NTMS_PARTSTATE_RESERVED = 9 };
// define the new state as the unknown state for now.
#define NTMS_PARTSTATE_NEW NTMS_PARTSTATE_UNKNOWN
#ifdef UNICODE
#define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONW
#define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONW
#else
#define _NTMS_PARTITIONINFORMATION _NTMS_PARTITIONINFORMATIONA
#define NTMS_PARTITIONINFORMATION NTMS_PARTITIONINFORMATIONA
#endif
typedef struct _NTMS_PARTITIONINFORMATIONA { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id
BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH]; CHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH]; // type string
CHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH]; // info string
DWORD dwMountCount; DWORD dwAllocateCount; LARGE_INTEGER Capacity; } NTMS_PARTITIONINFORMATIONA;
typedef struct _NTMS_PARTITIONINFORMATIONW { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id
BYTE OmidLabelId[NTMS_OMIDLABELID_LENGTH]; WCHAR szOmidLabelType[NTMS_OMIDLABELTYPE_LENGTH]; // type string
WCHAR szOmidLabelInfo[NTMS_OMIDLABELINFO_LENGTH]; // info string
DWORD dwMountCount; DWORD dwAllocateCount; LARGE_INTEGER Capacity; } NTMS_PARTITIONINFORMATIONW;
enum NtmsPoolType { NTMS_POOLTYPE_UNKNOWN = 0, NTMS_POOLTYPE_SCRATCH = 1, NTMS_POOLTYPE_FOREIGN = 2, NTMS_POOLTYPE_IMPORT = 3, NTMS_POOLTYPE_APPLICATION = 1000 };
enum NtmsAllocationPolicy { NTMS_ALLOCATE_FROMSCRATCH = 1 };
enum NtmsDeallocationPolicy { NTMS_DEALLOCATE_TOSCRATCH = 1 };
typedef struct _NTMS_MEDIAPOOLINFORMATION { DWORD PoolType; NTMS_GUID MediaType; NTMS_GUID Parent; DWORD AllocationPolicy; DWORD DeallocationPolicy; DWORD dwMaxAllocates; DWORD dwNumberOfPhysicalMedia; DWORD dwNumberOfLogicalMedia; DWORD dwNumberOfMediaPools; } NTMS_MEDIAPOOLINFORMATION;
enum NtmsReadWriteCharacteristics { NTMS_MEDIARW_UNKNOWN = 0, NTMS_MEDIARW_REWRITABLE = 1, NTMS_MEDIARW_WRITEONCE = 2, NTMS_MEDIARW_READONLY = 3 };
typedef struct _NTMS_MEDIATYPEINFORMATION { DWORD MediaType; // MediaTypeCodes
DWORD NumberOfSides; DWORD ReadWriteCharacteristics; DWORD DeviceType; } NTMS_MEDIATYPEINFORMATION;
#ifdef UNICODE
#define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONW
#define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONW
#else
#define _NTMS_DRIVETYPEINFORMATION _NTMS_DRIVETYPEINFORMATIONA
#define NTMS_DRIVETYPEINFORMATION NTMS_DRIVETYPEINFORMATIONA
#endif
typedef struct _NTMS_DRIVETYPEINFORMATIONA { CHAR szVendor[NTMS_VENDORNAME_LENGTH]; CHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD NumberOfHeads; DWORD DeviceType; } NTMS_DRIVETYPEINFORMATIONA;
typedef struct _NTMS_DRIVETYPEINFORMATIONW { WCHAR szVendor[NTMS_VENDORNAME_LENGTH]; WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD NumberOfHeads; DWORD DeviceType; } NTMS_DRIVETYPEINFORMATIONW;
#ifdef UNICODE
#define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONW
#define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONW
#else
#define _NTMS_CHANGERTYPEINFORMATION _NTMS_CHANGERTYPEINFORMATIONA
#define NTMS_CHANGERTYPEINFORMATION NTMS_CHANGERTYPEINFORMATIONA
#endif
typedef struct _NTMS_CHANGERTYPEINFORMATIONA { CHAR szVendor[NTMS_VENDORNAME_LENGTH]; CHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD DeviceType; } NTMS_CHANGERTYPEINFORMATIONA;
typedef struct _NTMS_CHANGERTYPEINFORMATIONW { WCHAR szVendor[NTMS_VENDORNAME_LENGTH]; WCHAR szProduct[NTMS_PRODUCTNAME_LENGTH]; DWORD DeviceType; } NTMS_CHANGERTYPEINFORMATIONW;
//
// Support both CHANGER & LIBRARY for (Dis/Enable) - backwards compatibility
//
enum NtmsLmOperation { NTMS_LM_REMOVE = 0, NTMS_LM_DISABLECHANGER = 1, NTMS_LM_DISABLELIBRARY = 1, NTMS_LM_ENABLECHANGER = 2, NTMS_LM_ENABLELIBRARY = 2, NTMS_LM_DISABLEDRIVE = 3, NTMS_LM_ENABLEDRIVE = 4, NTMS_LM_DISABLEMEDIA = 5, NTMS_LM_ENABLEMEDIA = 6, NTMS_LM_UPDATEOMID = 7, NTMS_LM_INVENTORY = 8, NTMS_LM_DOORACCESS = 9, NTMS_LM_EJECT = 10, NTMS_LM_EJECTCLEANER = 11, NTMS_LM_INJECT = 12, NTMS_LM_INJECTCLEANER = 13, NTMS_LM_PROCESSOMID = 14, NTMS_LM_CLEANDRIVE = 15, NTMS_LM_DISMOUNT = 16, NTMS_LM_MOUNT = 17, NTMS_LM_WRITESCRATCH = 18, NTMS_LM_CLASSIFY = 19, NTMS_LM_RESERVECLEANER = 20, NTMS_LM_RELEASECLEANER = 21, NTMS_LM_MAXWORKITEM };
enum NtmsLmState { NTMS_LM_QUEUED = 0, NTMS_LM_INPROCESS = 1, NTMS_LM_PASSED = 2, NTMS_LM_FAILED = 3, NTMS_LM_INVALID = 4, NTMS_LM_WAITING = 5, NTMS_LM_DEFERRED = 6, NTMS_LM_DEFFERED = 6, // DO NOT USE. Maintained for backward compatiblity
NTMS_LM_CANCELLED = 7, NTMS_LM_STOPPED = 8 };
#ifdef UNICODE
#define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONW
#define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONW
#else
#define _NTMS_LIBREQUESTINFORMATION _NTMS_LIBREQUESTINFORMATIONA
#define NTMS_LIBREQUESTINFORMATION NTMS_LIBREQUESTINFORMATIONA
#endif
typedef struct _NTMS_LIBREQUESTINFORMATIONA { DWORD OperationCode; DWORD OperationOption; DWORD State; NTMS_GUID PartitionId; NTMS_GUID DriveId; NTMS_GUID PhysMediaId; NTMS_GUID Library; NTMS_GUID SlotId; SYSTEMTIME TimeQueued; SYSTEMTIME TimeCompleted; CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; DWORD dwErrorCode; // error value if state = FAILED
NTMS_GUID WorkItemId; // work item id for cancel and other requests that
DWORD dwPriority; // require and associated work item
} NTMS_LIBREQUESTINFORMATIONA;
typedef struct _NTMS_LIBREQUESTINFORMATIONW { DWORD OperationCode; DWORD OperationOption; DWORD State; NTMS_GUID PartitionId; NTMS_GUID DriveId; NTMS_GUID PhysMediaId; NTMS_GUID Library; NTMS_GUID SlotId; SYSTEMTIME TimeQueued; SYSTEMTIME TimeCompleted; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; DWORD dwErrorCode; // error value if state = FAILED
NTMS_GUID WorkItemId; // work item id for cancel and other requests that
DWORD dwPriority; // require and associated work item
} NTMS_LIBREQUESTINFORMATIONW;
enum NtmsOpreqCommand { NTMS_OPREQ_UNKNOWN = 0, NTMS_OPREQ_NEWMEDIA = 1, NTMS_OPREQ_CLEANER = 2, NTMS_OPREQ_DEVICESERVICE = 3, NTMS_OPREQ_MOVEMEDIA = 4, NTMS_OPREQ_MESSAGE = 5 };
enum NtmsOpreqState { NTMS_OPSTATE_UNKNOWN = 0, NTMS_OPSTATE_SUBMITTED = 1, NTMS_OPSTATE_ACTIVE = 2, NTMS_OPSTATE_INPROGRESS = 3, NTMS_OPSTATE_REFUSED = 4, NTMS_OPSTATE_COMPLETE = 5 };
#ifdef UNICODE
#define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONW
#define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONW
#else
#define _NTMS_OPREQUESTINFORMATION _NTMS_OPREQUESTINFORMATIONA
#define NTMS_OPREQUESTINFORMATION NTMS_OPREQUESTINFORMATIONA
#endif
typedef struct _NTMS_OPREQUESTINFORMATIONA { DWORD Request; SYSTEMTIME Submitted; DWORD State; CHAR szMessage[NTMS_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_OPREQUESTINFORMATIONA;
typedef struct _NTMS_OPREQUESTINFORMATIONW { DWORD Request; SYSTEMTIME Submitted; DWORD State; WCHAR szMessage[NTMS_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_OPREQUESTINFORMATIONW;
typedef struct _NTMS_COMPUTERINFORMATION { DWORD dwLibRequestPurgeTime; DWORD dwOpRequestPurgeTime; DWORD dwLibRequestFlags; DWORD dwOpRequestFlags; DWORD dwMediaPoolPolicy; } NTMS_COMPUTERINFORMATION;
// library request option flags
enum NtmsLibRequestFlags { NTMS_LIBREQFLAGS_NOAUTOPURGE = 0x01, NTMS_LIBREQFLAGS_NOFAILEDPURGE = 0x02 };
// operator request option flags
enum NtmsOpRequestFlags { NTMS_OPREQFLAGS_NOAUTOPURGE = 0x01, NTMS_OPREQFLAGS_NOFAILEDPURGE = 0x02, NTMS_OPREQFLAGS_NOALERTS = 0x10, NTMS_OPREQFLAGS_NOTRAYICON = 0x20 };
// media pool policy flags
enum NtmsMediaPoolPolicy { // purge offline scratch media. By default we keep offline scratch media
// in the fixed offline media pool
NTMS_POOLPOLICY_PURGEOFFLINESCRATCH = 0x01, NTMS_POOLPOLICY_KEEPOFFLINEIMPORT = 0x02 };
#ifdef UNICODE
#define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONW
#define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONW
#define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONW
#else
#define _NTMS_OBJECTINFORMATION _NTMS_OBJECTINFORMATIONA
#define NTMS_OBJECTINFORMATION NTMS_OBJECTINFORMATIONA
#define LPNTMS_OBJECTINFORMATION LPNTMS_OBJECTINFORMATIONA
#endif
enum NtmsOperationalState { NTMS_READY = 0, NTMS_INITIALIZING = 10, NTMS_NEEDS_SERVICE = 20, NTMS_NOT_PRESENT = 21 };
typedef struct _NTMS_OBJECTINFORMATIONA { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; CHAR szName[NTMS_OBJECTNAME_LENGTH]; CHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS
[switch_is(dwType)] union { [case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONA Drive; [case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONA DriveType; [case(NTMS_LIBRARY)] NTMS_LIBRARYINFORMATION Library; [case(NTMS_CHANGER)] NTMS_CHANGERINFORMATIONA Changer; [case(NTMS_CHANGER_TYPE)] NTMS_CHANGERTYPEINFORMATIONA ChangerType; [case(NTMS_STORAGESLOT)] NTMS_STORAGESLOTINFORMATION StorageSlot; [case(NTMS_IEDOOR)] NTMS_IEDOORINFORMATION IEDoor; [case(NTMS_IEPORT)] NTMS_IEPORTINFORMATION IEPort; [case(NTMS_PHYSICAL_MEDIA)] NTMS_PMIDINFORMATIONA PhysicalMedia; [case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia; [case(NTMS_PARTITION)] NTMS_PARTITIONINFORMATIONA Partition; [case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool; [case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType; [case(NTMS_LIBREQUEST)] NTMS_LIBREQUESTINFORMATIONA LibRequest; [case(NTMS_OPREQUEST)] NTMS_OPREQUESTINFORMATIONA OpRequest; [case(NTMS_COMPUTER)] NTMS_COMPUTERINFORMATION Computer; [default] ; } Info; #else
union { NTMS_DRIVEINFORMATIONA Drive; NTMS_DRIVETYPEINFORMATIONA DriveType; NTMS_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONA Changer; NTMS_CHANGERTYPEINFORMATIONA ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_PMIDINFORMATIONA PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_PARTITIONINFORMATIONA Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_LIBREQUESTINFORMATIONA LibRequest; NTMS_OPREQUESTINFORMATIONA OpRequest; NTMS_COMPUTERINFORMATION Computer; } Info; #endif // MIDL_PASS
} NTMS_OBJECTINFORMATIONA, *LPNTMS_OBJECTINFORMATIONA;
typedef struct _NTMS_OBJECTINFORMATIONW { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; WCHAR szName[NTMS_OBJECTNAME_LENGTH]; WCHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS
[switch_is(dwType)] union { [case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONW Drive; [case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONW DriveType; [case(NTMS_LIBRARY)] NTMS_LIBRARYINFORMATION Library; [case(NTMS_CHANGER)] NTMS_CHANGERINFORMATIONW Changer; [case(NTMS_CHANGER_TYPE)] NTMS_CHANGERTYPEINFORMATIONW ChangerType; [case(NTMS_STORAGESLOT)] NTMS_STORAGESLOTINFORMATION StorageSlot; [case(NTMS_IEDOOR)] NTMS_IEDOORINFORMATION IEDoor; [case(NTMS_IEPORT)] NTMS_IEPORTINFORMATION IEPort; [case(NTMS_PHYSICAL_MEDIA)] NTMS_PMIDINFORMATIONW PhysicalMedia; [case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia; [case(NTMS_PARTITION)] NTMS_PARTITIONINFORMATIONW Partition; [case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool; [case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType; [case(NTMS_LIBREQUEST)] NTMS_LIBREQUESTINFORMATIONW LibRequest; [case(NTMS_OPREQUEST)] NTMS_OPREQUESTINFORMATIONW OpRequest; [case(NTMS_COMPUTER)] NTMS_COMPUTERINFORMATION Computer; [default] ; } Info; #else
union { NTMS_DRIVEINFORMATIONW Drive; NTMS_DRIVETYPEINFORMATIONW DriveType; NTMS_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONW Changer; NTMS_CHANGERTYPEINFORMATIONW ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_PMIDINFORMATIONW PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_PARTITIONINFORMATIONW Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_LIBREQUESTINFORMATIONW LibRequest; NTMS_OPREQUESTINFORMATIONW OpRequest; NTMS_COMPUTERINFORMATION Computer; } Info; #endif // MIDL_PASS
} NTMS_OBJECTINFORMATIONW, *LPNTMS_OBJECTINFORMATIONW;
//********************************************************************************
// NT 5.0 BETA1 variations of object information. Required to keep here for
// backward compatibility in DCOM interface.
// Different data structures add the _I1_ to the structure name, denoting
// used for Interface 1 only.
// DO NOT MODIFY IN FUTURE VERSIONS !!
//********************************************************************************
#ifdef UNICODE
#define NTMS_I1_LIBREQUESTINFORMATION NTMS_I1_LIBREQUESTINFORMATIONW
#define NTMS_I1_PARTITIONINFORMATION NTMS_I1_PARTITIONINFORMATIONW
#define NTMS_I1_PMIDINFORMATION NTMS_I1_PMIDINFORMATIONW
#define NTMS_I1_OPREQUESTINFORMATION NTMS_I1_OPREQUESTINFORMATIONW
#define NTMS_I1_OBJECTINFORMATION NTMS_I1_OBJECTINFORMATIONW
#else
#define NTMS_I1_LIBREQUESTINFORMATION NTMS_I1_LIBREQUESTINFORMATIONA
#define NTMS_I1_PARTITIONINFORMATION NTMS_I1_PARTITIONINFORMATIONA
#define NTMS_I1_PMIDINFORMATION NTMS_I1_PMIDINFORMATIONA
#define NTMS_I1_OPREQUESTINFORMATION NTMS_I1_OPREQUESTINFORMATIONA
#define NTMS_I1_OBJECTINFORMATION NTMS_I1_OBJECTINFORMATIONA
#endif
typedef struct _NTMS_I1_LIBRARYINFORMATION { DWORD LibraryType; NTMS_GUID CleanerSlot; NTMS_GUID CleanerSlotDefault; BOOL LibrarySupportsDriveCleaning; BOOL BarCodeReaderInstalled; DWORD InventoryMethod; DWORD dwCleanerUsesRemaining; DWORD FirstDriveNumber; DWORD dwNumberOfDrives; DWORD FirstSlotNumber; DWORD dwNumberOfSlots; DWORD FirstDoorNumber; DWORD dwNumberOfDoors; DWORD FirstPortNumber; DWORD dwNumberOfPorts; DWORD FirstChangerNumber; DWORD dwNumberOfChangers; DWORD dwNumberOfMedia; DWORD dwNumberOfMediaTypes; DWORD dwNumberOfLibRequests; GUID Reserved; } NTMS_I1_LIBRARYINFORMATION;
typedef struct _NTMS_I1_LIBREQUESTINFORMATIONA { DWORD OperationCode; DWORD OperationOption; DWORD State; NTMS_GUID PartitionId; NTMS_GUID DriveId; NTMS_GUID PhysMediaId; NTMS_GUID Library; NTMS_GUID SlotId; SYSTEMTIME TimeQueued; SYSTEMTIME TimeCompleted; CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_LIBREQUESTINFORMATIONA;
typedef struct _NTMS_I1_LIBREQUESTINFORMATIONW { DWORD OperationCode; DWORD OperationOption; DWORD State; NTMS_GUID PartitionId; NTMS_GUID DriveId; NTMS_GUID PhysMediaId; NTMS_GUID Library; NTMS_GUID SlotId; SYSTEMTIME TimeQueued; SYSTEMTIME TimeCompleted; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_LIBREQUESTINFORMATIONW;
typedef struct _NTMS_I1_PMIDINFORMATIONA { NTMS_GUID CurrentLibrary; // the current library
NTMS_GUID MediaPool; // media pool that the media belongs to
NTMS_GUID Location; // actual location of the media
DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media
CHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string
DWORD BarCodeState; // current state of the bar code
CHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state
DWORD dwNumberOfPartitions; } NTMS_I1_PMIDINFORMATIONA;
typedef struct _NTMS_I1_PMIDINFORMATIONW { NTMS_GUID CurrentLibrary; // the current library
NTMS_GUID MediaPool; // media pool that the media belongs to
NTMS_GUID Location; // actual location of the media
DWORD LocationType; NTMS_GUID MediaType; NTMS_GUID HomeSlot; // home slot for online media
WCHAR szBarCode[NTMS_BARCODE_LENGTH]; // bar code string
DWORD BarCodeState; // current state of the bar code
WCHAR szSequenceNumber[NTMS_SEQUENCE_LENGTH]; DWORD MediaState; // current media state
DWORD dwNumberOfPartitions; } NTMS_I1_PMIDINFORMATIONW;
typedef struct _NTMS_I1_PARTITIONINFORMATIONA { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id
BYTE OmidLabelId[255]; CHAR szOmidLabelType[64]; // type string
CHAR szOmidLabelInfo[256]; // info string
DWORD dwMountCount; DWORD dwAllocateCount; } NTMS_I1_PARTITIONINFORMATIONA;
typedef struct _NTMS_I1_PARTITIONINFORMATIONW { NTMS_GUID PhysicalMedia; NTMS_GUID LogicalMedia; DWORD State; WORD Side; DWORD dwOmidLabelIdLength; // binary id
BYTE OmidLabelId[255]; WCHAR szOmidLabelType[64]; // type string
WCHAR szOmidLabelInfo[256]; // info string
DWORD dwMountCount; DWORD dwAllocateCount; } NTMS_I1_PARTITIONINFORMATIONW;
typedef struct _NTMS_I1_OPREQUESTINFORMATIONA { DWORD Request; SYSTEMTIME Submitted; DWORD State; CHAR szMessage[NTMS_I1_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; CHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; CHAR szUser[NTMS_USERNAME_LENGTH]; CHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_OPREQUESTINFORMATIONA;
typedef struct _NTMS_I1_OPREQUESTINFORMATIONW { DWORD Request; SYSTEMTIME Submitted; DWORD State; WCHAR szMessage[NTMS_I1_MESSAGE_LENGTH]; DWORD Arg1Type; NTMS_GUID Arg1; DWORD Arg2Type; NTMS_GUID Arg2; WCHAR szApplication[NTMS_APPLICATIONNAME_LENGTH]; WCHAR szUser[NTMS_USERNAME_LENGTH]; WCHAR szComputer[NTMS_COMPUTERNAME_LENGTH]; } NTMS_I1_OPREQUESTINFORMATIONW;
typedef struct _NTMS_I1_OBJECTINFORMATIONA { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; CHAR szName[NTMS_OBJECTNAME_LENGTH]; CHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS
[switch_is(dwType)] union { [case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONA Drive; [case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONA DriveType; [case(NTMS_LIBRARY)] NTMS_I1_LIBRARYINFORMATION Library; [case(NTMS_CHANGER)] NTMS_CHANGERINFORMATIONA Changer; [case(NTMS_CHANGER_TYPE)] NTMS_CHANGERTYPEINFORMATIONA ChangerType; [case(NTMS_STORAGESLOT)] NTMS_STORAGESLOTINFORMATION StorageSlot; [case(NTMS_IEDOOR)] NTMS_IEDOORINFORMATION IEDoor; [case(NTMS_IEPORT)] NTMS_IEPORTINFORMATION IEPort; [case(NTMS_PHYSICAL_MEDIA)] NTMS_I1_PMIDINFORMATIONA PhysicalMedia; [case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia; [case(NTMS_PARTITION)] NTMS_I1_PARTITIONINFORMATIONA Partition; [case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool; [case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType; [case(NTMS_LIBREQUEST)] NTMS_I1_LIBREQUESTINFORMATIONA LibRequest; [case(NTMS_OPREQUEST)] NTMS_I1_OPREQUESTINFORMATIONA OpRequest; [default] ; } Info; #else
union { NTMS_DRIVEINFORMATIONA Drive; NTMS_DRIVETYPEINFORMATIONA DriveType; NTMS_I1_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONA Changer; NTMS_CHANGERTYPEINFORMATIONA ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_I1_PMIDINFORMATIONA PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_I1_PARTITIONINFORMATIONA Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_I1_LIBREQUESTINFORMATIONA LibRequest; NTMS_I1_OPREQUESTINFORMATIONA OpRequest; } Info; #endif // MIDL_PASS
} NTMS_I1_OBJECTINFORMATIONA, *LPNTMS_I1_OBJECTINFORMATIONA;
typedef struct _NTMS_I1_OBJECTINFORMATIONW { DWORD dwSize; DWORD dwType; SYSTEMTIME Created; SYSTEMTIME Modified; NTMS_GUID ObjectGuid; BOOL Enabled; DWORD dwOperationalState; WCHAR szName[NTMS_OBJECTNAME_LENGTH]; WCHAR szDescription[NTMS_DESCRIPTION_LENGTH]; #ifdef MIDL_PASS
[switch_is(dwType)] union { [case(NTMS_DRIVE)] NTMS_DRIVEINFORMATIONW Drive; [case(NTMS_DRIVE_TYPE)] NTMS_DRIVETYPEINFORMATIONW DriveType; [case(NTMS_LIBRARY)] NTMS_I1_LIBRARYINFORMATION Library; [case(NTMS_CHANGER)] NTMS_CHANGERINFORMATIONW Changer; [case(NTMS_CHANGER_TYPE)] NTMS_CHANGERTYPEINFORMATIONW ChangerType; [case(NTMS_STORAGESLOT)] NTMS_STORAGESLOTINFORMATION StorageSlot; [case(NTMS_IEDOOR)] NTMS_IEDOORINFORMATION IEDoor; [case(NTMS_IEPORT)] NTMS_IEPORTINFORMATION IEPort; [case(NTMS_PHYSICAL_MEDIA)] NTMS_I1_PMIDINFORMATIONW PhysicalMedia; [case(NTMS_LOGICAL_MEDIA)] NTMS_LMIDINFORMATION LogicalMedia; [case(NTMS_PARTITION)] NTMS_I1_PARTITIONINFORMATIONW Partition; [case(NTMS_MEDIA_POOL)] NTMS_MEDIAPOOLINFORMATION MediaPool; [case(NTMS_MEDIA_TYPE)] NTMS_MEDIATYPEINFORMATION MediaType; [case(NTMS_LIBREQUEST)] NTMS_I1_LIBREQUESTINFORMATIONW LibRequest; [case(NTMS_OPREQUEST)] NTMS_I1_OPREQUESTINFORMATIONW OpRequest; [default] ; } Info; #else
union { NTMS_DRIVEINFORMATIONW Drive; NTMS_DRIVETYPEINFORMATIONW DriveType; NTMS_I1_LIBRARYINFORMATION Library; NTMS_CHANGERINFORMATIONW Changer; NTMS_CHANGERTYPEINFORMATIONW ChangerType; NTMS_STORAGESLOTINFORMATION StorageSlot; NTMS_IEDOORINFORMATION IEDoor; NTMS_IEPORTINFORMATION IEPort; NTMS_I1_PMIDINFORMATIONW PhysicalMedia; NTMS_LMIDINFORMATION LogicalMedia; NTMS_I1_PARTITIONINFORMATIONW Partition; NTMS_MEDIAPOOLINFORMATION MediaPool; NTMS_MEDIATYPEINFORMATION MediaType; NTMS_I1_LIBREQUESTINFORMATIONW LibRequest; NTMS_I1_OPREQUESTINFORMATIONW OpRequest; } Info; #endif // MIDL_PASS
} NTMS_I1_OBJECTINFORMATIONW, *LPNTMS_I1_OBJECTINFORMATIONW;
#endif // NTMS_NOREDEF
#ifndef NTMS_NOREDEF
//=======================================================================
// CREATENTMSMEDIA DEFINITIONS
//=======================================================================
enum NtmsCreateNtmsMediaOptions { NTMS_ERROR_ON_DUPLICATE = 0x0001 };
#endif
#ifndef MIDL_PASS
//======================================================================
// OBJECT MANAGEMENT APIS
//======================================================================
#ifdef PRE_SEVIL
DWORD WINAPI GetNtmsObjectInformation( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATION lpInfo );
DWORD WINAPI SetNtmsObjectInformation( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATION lpInfo );
#endif
// Added by SEvilia
DWORD WINAPI GetNtmsObjectInformationA( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONA lpInfo );
DWORD WINAPI GetNtmsObjectInformationW( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONW lpInfo );
DWORD WINAPI SetNtmsObjectInformationA( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONA lpInfo );
DWORD WINAPI SetNtmsObjectInformationW( HANDLE hSession, LPNTMS_GUID lpObjectId, LPNTMS_OBJECTINFORMATIONW lpInfo ); // END of SEVILIA
DWORD WINAPI CreateNtmsMediaA( HANDLE hSession, LPNTMS_OBJECTINFORMATIONA lpMedia, LPNTMS_OBJECTINFORMATIONA lpList, DWORD dwOptions ) ;
DWORD WINAPI CreateNtmsMediaW( HANDLE hSession, LPNTMS_OBJECTINFORMATIONW lpMedia, LPNTMS_OBJECTINFORMATIONW lpList, DWORD dwOptions ) ;
enum NtmsEnumerateOption { NTMS_ENUM_DEFAULT = 0, NTMS_ENUM_ROOTPOOL = 1 };
DWORD WINAPI EnumerateNtmsObject( HANDLE hSession, const LPNTMS_GUID lpContainerId, LPNTMS_GUID lpList, LPDWORD lpdwListSize, DWORD dwType, DWORD dwOptions );
DWORD WINAPI DisableNtmsObject( HANDLE hSession, DWORD dwType, LPNTMS_GUID lpObjectId );
DWORD WINAPI EnableNtmsObject( HANDLE hSession, DWORD dwType, LPNTMS_GUID lpObjectId );
enum NtmsEjectOperation { NTMS_EJECT_START = 0, NTMS_EJECT_STOP = 1, NTMS_EJECT_QUEUE = 2, NTMS_EJECT_FORCE = 3, NTMS_EJECT_IMMEDIATE = 4, NTMS_EJECT_ASK_USER = 5 };
DWORD WINAPI EjectNtmsMedia( HANDLE hSession, LPNTMS_GUID lpMediaId, LPNTMS_GUID lpEjectOperation, DWORD dwAction );
enum NtmsInjectOperation { NTMS_INJECT_START = 0, NTMS_INJECT_STOP = 1, NTMS_INJECT_RETRACT = 2, NTMS_INJECT_STARTMANY = 3 };
DWORD WINAPI InjectNtmsMedia( HANDLE hSession, LPNTMS_GUID lpLibraryId, LPNTMS_GUID lpInjectOperation, DWORD dwAction );
DWORD WINAPI AccessNtmsLibraryDoor( HANDLE hSession, LPNTMS_GUID lpLibraryId, DWORD dwAction );
DWORD WINAPI CleanNtmsDrive( HANDLE hSession, LPNTMS_GUID lpDriveId );
DWORD WINAPI DismountNtmsDrive( HANDLE hSession, LPNTMS_GUID lpDriveId );
DWORD WINAPI InventoryNtmsLibrary( HANDLE hSession, LPNTMS_GUID lpLibraryId, DWORD dwAction );
DWORD WINAPI IdentifyNtmsSlot( HANDLE hSession, LPNTMS_GUID lpSlotId, DWORD dwOption );
// definitions for the UpdateNtmsOmidInfo ...
#define NTMS_OMID_TYPE_RAW_LABEL 0x01
#define NTMS_OMID_TYPE_FILESYSTEM_INFO 0x02
typedef struct { WCHAR FileSystemType[64] ; WCHAR VolumeName[256] ; DWORD SerialNumber ; } NTMS_FILESYSTEM_INFO ;
DWORD WINAPI UpdateNtmsOmidInfo( HANDLE hSession, LPNTMS_GUID lpMediaId, DWORD labelType, DWORD numberOfBytes, LPVOID lpBuffer );
DWORD WINAPI CancelNtmsLibraryRequest( HANDLE hSession, LPNTMS_GUID lpRequestId );
DWORD WINAPI GetNtmsRequestOrder( HANDLE hSession, LPNTMS_GUID lpRequestId, LPDWORD lpdwOrderNumber );
DWORD WINAPI SetNtmsRequestOrder( HANDLE hSession, LPNTMS_GUID lpRequestId, DWORD dwOrderNumber );
DWORD WINAPI DeleteNtmsRequests( HANDLE hSession, LPNTMS_GUID lpRequestId, DWORD dwType, DWORD dwCount );
DWORD WINAPI ReserveNtmsCleanerSlot ( HANDLE hSession, LPNTMS_GUID lpLibrary, LPNTMS_GUID lpSlot );
DWORD WINAPI ReleaseNtmsCleanerSlot ( HANDLE hSession, LPNTMS_GUID lpLibrary );
DWORD WINAPI InjectNtmsCleaner ( HANDLE hSession, LPNTMS_GUID lpLibrary, LPNTMS_GUID lpInjectOperation, DWORD dwNumberOfCleansLeft, DWORD dwAction );
DWORD WINAPI EjectNtmsCleaner ( HANDLE hSession, LPNTMS_GUID lpLibrary, LPNTMS_GUID lpEjectOperation, DWORD dwAction );
DWORD WINAPI BeginNtmsDeviceChangeDetection( HANDLE hSession, LPHANDLE lpDetectHandle );
DWORD WINAPI SetNtmsDeviceChangeDetection( HANDLE hSession, HANDLE DetectHandle, LPNTMS_GUID lpRequestId, DWORD dwType, DWORD dwCount );
DWORD WINAPI EndNtmsDeviceChangeDetection( HANDLE hSession, HANDLE DetectHandle );
#endif // MIDL_PASS
#ifndef NTMS_NOREDEF
enum NtmsDriveType { NTMS_UNKNOWN_DRIVE = 0 };
#endif // NTMS_NOREDEF
#ifndef MIDL_PASS
// Security for NTMS API
DWORD WINAPI GetNtmsObjectSecurity( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor, DWORD nLength, LPDWORD lpnLengthNeeded );
DWORD WINAPI SetNtmsObjectSecurity( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR lpSecurityDescriptor );
// Security Access Control Masks :
// NTMS_USE_ACCESS is required to use an NTMS object. For example,
// you will need this access to a library in order to mount media
// within it.
// NTMS_MODIFY_ACCESS is required to make changes to an NTMS object.
// For example, you will need modify access in order to change the name
// of an object or change its attributes.
// NTMS_CONTROL_ACCESS is required to control an NTMS object. For
// example, you will need control access to a library in order to
// inject media, eject media, clean or open the door.
//
enum NtmsAccessMask { NTMS_USE_ACCESS = 0x1, NTMS_MODIFY_ACCESS = 0x2, NTMS_CONTROL_ACCESS = 0x4 };
// Generic Mappings :
#define NTMS_GENERIC_READ NTMS_USE_ACCESS
#define NTMS_GENERIC_WRITE NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS
#define NTMS_GENERIC_EXECUTE NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS
#define NTMS_GENERIC_ALL NTMS_USE_ACCESS | NTMS_MODIFY_ACCESS | NTMS_CONTROL_ACCESS
// Maximum attribute size for NTMS Object attribute API's
#define NTMS_MAXATTR_LENGTH 0x10000
// Maximum len of attribute name (# of chars.)
#define NTMS_MAXATTR_NAMELEN 32
// Object extensions for NTMS API
DWORD WINAPI GetNtmsObjectAttributeA( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCSTR lpAttributeName, LPVOID lpAttributeData, LPDWORD lpAttributeSize );
DWORD WINAPI GetNtmsObjectAttributeW( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCWSTR lpAttributeName, LPVOID lpAttributeData, LPDWORD lpAttributeSize );
DWORD WINAPI SetNtmsObjectAttributeA( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCSTR lpAttributeName, LPVOID lpAttributeData, DWORD dwAttributeSize );
DWORD WINAPI SetNtmsObjectAttributeW( HANDLE hSession, LPNTMS_GUID lpObjectId, DWORD dwType, LPCWSTR lpAttributeName, LPVOID lpAttributeData, DWORD AttributeSize );
//UI Notification
enum NtmsUITypes { NTMS_UITYPE_INVALID = 0, NTMS_UITYPE_INFO, NTMS_UITYPE_REQ, NTMS_UITYPE_ERR, NTMS_UITYPE_MAX };
enum NtmsUIOperations { NTMS_UIDEST_ADD = 1, NTMS_UIDEST_DELETE, NTMS_UIDEST_DELETEALL, NTMS_UIOPERATION_MAX };
DWORD WINAPI GetNtmsUIOptionsA( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, LPSTR lpszDestination, LPDWORD lpAttributeSize );
DWORD WINAPI GetNtmsUIOptionsW( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, LPWSTR lpszDestination, LPDWORD lpdwSize );
DWORD WINAPI SetNtmsUIOptionsA( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, DWORD dwOperation, LPCSTR lpszDestination );
DWORD WINAPI SetNtmsUIOptionsW( HANDLE hSession, const LPNTMS_GUID lpObjectId, DWORD dwType, DWORD dwOperation, LPCWSTR lpszDestination );
// Operator Requests
DWORD WINAPI SubmitNtmsOperatorRequestW( HANDLE hSession, DWORD dwRequest, LPCWSTR lpMessage, LPNTMS_GUID lpArg1Id, LPNTMS_GUID lpArg2Id, LPNTMS_GUID lpRequestId );
DWORD WINAPI SubmitNtmsOperatorRequestA( HANDLE hSession, DWORD dwRequest, LPCSTR lpMessage, LPNTMS_GUID lpArg1Id, LPNTMS_GUID lpArg2Id, LPNTMS_GUID lpRequestId );
DWORD WINAPI WaitForNtmsOperatorRequest( HANDLE hSession, LPNTMS_GUID lpRequestId, DWORD dwTimeout );
DWORD WINAPI CancelNtmsOperatorRequest( HANDLE hSession, LPNTMS_GUID lpRequestId );
DWORD WINAPI SatisfyNtmsOperatorRequest( HANDLE hSession, LPNTMS_GUID lpRequestId );
#endif // MIDL_PASS
#ifndef NTMS_NOREDEF
enum NtmsNotificationOperations { NTMS_OBJ_UPDATE = 1, NTMS_OBJ_INSERT = 2, NTMS_OBJ_DELETE = 3, NTMS_EVENT_SIGNAL = 4, NTMS_EVENT_COMPLETE = 5 };
// object notification
typedef struct _NTMS_NOTIFICATIONINFORMATION { DWORD dwOperation; NTMS_GUID ObjectId; } NTMS_NOTIFICATIONINFORMATION, *LPNTMS_NOTIFICATIONINFORMATION;
#endif // NTMS_NOREDEF
#ifndef MIDL_PASS
DWORD WINAPI ImportNtmsDatabase( HANDLE hSession );
DWORD WINAPI ExportNtmsDatabase( HANDLE hSession );
#endif // MIDL_PASS
#ifndef MIDL_PASS
DWORD WINAPI ImportNtmsDatabase( HANDLE hSession );
DWORD WINAPI ExportNtmsDatabase( HANDLE hSession );
#endif // MIDL_PASS
#ifndef MIDL_PASS
HANDLE WINAPI OpenNtmsNotification( HANDLE hSession, DWORD dwType );
DWORD WINAPI WaitForNtmsNotification( HANDLE hNotification, LPNTMS_NOTIFICATIONINFORMATION lpNotificationInformation, DWORD dwTimeout );
DWORD WINAPI CloseNtmsNotification( HANDLE hNotification );
#endif // MIDL_PASS
#ifndef MIDL_PASS
DWORD WINAPI EjectDiskFromSADriveW( LPCWSTR lpComputerName, LPCWSTR lpAppName, LPCWSTR lpDeviceName, HWND hWnd, LPCWSTR lpTitle, LPCWSTR lpMessage, DWORD dwOptions );
DWORD WINAPI EjectDiskFromSADriveA( LPCSTR lpComputerName, LPCSTR lpAppName, LPCSTR lpDeviceName, HWND hWnd, LPCSTR lpTitle, LPCSTR lpMessage, DWORD dwOptions );
#endif
#ifndef MIDL_PASS
DWORD WINAPI GetVolumesFromDriveW( LPWSTR pszDriveName, LPWSTR *VolumeNameBufferPtr, LPWSTR *DriveLetterBufferPtr );
DWORD WINAPI GetVolumesFromDriveA( LPSTR pszDriveName, LPSTR* VolumeNameBufferPtr, LPSTR* DriveLetterBufferPtr );
#endif
#ifdef __cplusplus
} // end extern "C"
#endif
#pragma pack()
#endif // _INCL_NTMSAPI_H_
|