windows-nt/Source/XPSP1/NT/public/sdk/inc/ntmsapi.h
2020-09-26 16:20:57 +08:00

1909 lines
57 KiB
C

/*++
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
};
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
) ;
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_