Mac OS 9
DriverGestalt.h File Reference

Driver Gestalt interfaces. More...

#include <MacTypes.h>
#include <OSUtils.h>
#include <NameRegistry.h>
#include <SCSI.h>
#include <USB.h>
#include <Disks.h>

Go to the source code of this file.

Data Structures

struct  DriverConfigParam
 
struct  DriverGestaltParam
 
struct  DriverGestaltDevTResponse
 
struct  DriverGestaltIntfResponse
 
struct  DriverGestaltPowerResponse
 
struct  DriverGestaltSyncResponse
 
struct  DriverGestaltBootResponse
 
struct  DriverGestaltAPIResponse
 
struct  DriverGestaltFlushResponse
 
struct  DriverGestaltPurgeResponse
 
struct  DriverGestaltEjectResponse
 
struct  DriverGestaltVMOptionsResponse
 
struct  DriverGestaltDriveAddInfoResponse
 
struct  DriverGestaltMediaInfoResponse
 
struct  DriverGestaltATADev1Response
 
union  DriverGestaltDeviceReferenceResponse
 
struct  DriverGestaltNameRegistryResponse
 
struct  DriverGestaltDeviceModelInfoResponse
 
struct  DriverGestaltSupportedMediaTypesResponse
 
struct  DriverGestaltOFBootSupportResponse
 
struct  CDDeviceCharacteristics
 
struct  partInfoRec
 
struct  vPartInfoRec
 

Macros

#define GetDriverGestaltDevTResponse(p)    ((DriverGestaltDevTResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltIntfResponse(p)    ((DriverGestaltIntfResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltPowerResponse(p)    ((DriverGestaltPowerResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltSyncResponse(p)    ((DriverGestaltSyncResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltBootResponse(p)    ((DriverGestaltBootResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltPurgeResponse(p)    ((DriverGestaltPurgeResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltEjectResponse(p)    ((DriverGestaltEjectResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltVersionResponse(p)    (((NumVersion *)(&((p)->driverGestaltResponse))))
 
#define GetDriverGestaltAPIResponse(p)    ((DriverGestaltAPIResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltBooleanResponse(p)    ((Boolean *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltFlushResponse(p)    ((DriverGestaltFlushResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltVMOptionsResponse(p)    ((DriverGestaltVMOptionsResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltMediaInfoResponse(p)    ((DriverGestaltMediaInfoResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltDeviceReferenceResponse(p)    ((DriverGestaltDeviceReferenceResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltNameRegistryResponse(p)    ((DriverGestaltNameRegistryResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltDeviceModelInfoResponse(p)    ((DriverGestaltDeviceModelInfoResponse **)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltSupportedMediaTypesResponse(p)    ((DriverGestaltSupportedMediaTypesResponse **)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltOFBootSupportResponse(p)    ((DriverGestaltOFBootSupportResponse *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltATADev1Response(p)    ((DriverGestaltATADev1Response *)(&((p)->driverGestaltResponse)))
 
#define GetDriverGestaltDriveAddInfoResponse(p)    ((DriverGestaltDriveAddInfoResponse *)(&((p)->driverGestaltResponse)))
 

Typedefs

typedef struct DriverConfigParam DriverConfigParam
 
typedef struct DriverGestaltParam DriverGestaltParam
 
typedef struct DriverGestaltDevTResponse DriverGestaltDevTResponse
 
typedef struct DriverGestaltIntfResponse DriverGestaltIntfResponse
 
typedef struct DriverGestaltPowerResponse DriverGestaltPowerResponse
 
typedef struct DriverGestaltSyncResponse DriverGestaltSyncResponse
 
typedef struct DriverGestaltBootResponse DriverGestaltBootResponse
 
typedef struct DriverGestaltAPIResponse DriverGestaltAPIResponse
 
typedef struct DriverGestaltFlushResponse DriverGestaltFlushResponse
 
typedef struct DriverGestaltPurgeResponse DriverGestaltPurgeResponse
 
typedef struct DriverGestaltEjectResponse DriverGestaltEjectResponse
 
typedef struct DriverGestaltVMOptionsResponse DriverGestaltVMOptionsResponse
 
typedef struct DriverGestaltDriveAddInfoResponse DriverGestaltDriveAddInfoResponse
 
typedef struct DriverGestaltMediaInfoResponse DriverGestaltMediaInfoResponse
 
typedef struct DriverGestaltATADev1Response DriverGestaltATADev1Response
 
typedef union DriverGestaltDeviceReferenceResponse DriverGestaltDeviceReferenceResponse
 
typedef struct DriverGestaltNameRegistryResponse DriverGestaltNameRegistryResponse
 
typedef struct DriverGestaltDeviceModelInfoResponse DriverGestaltDeviceModelInfoResponse
 
typedef struct DriverGestaltSupportedMediaTypesResponse DriverGestaltSupportedMediaTypesResponse
 
typedef struct DriverGestaltOFBootSupportResponse DriverGestaltOFBootSupportResponse
 
typedef struct CDDeviceCharacteristics CDDeviceCharacteristics
 
typedef struct partInfoRec partInfoRec
 
typedef partInfoRecpartInfoRecPtr
 
typedef struct vPartInfoRec vPartInfoRec
 
typedef vPartInfoRecvPartInfoRecPtr
 

Enumerations

enum  { kbDriverGestaltEnable = 2 , kmDriverGestaltEnableMask = (1 << kbDriverGestaltEnable) }
 
enum  {
  kDriverGestaltCode = 43 , kDriverConfigureCode = 43 , kcsSetBootPartitionCode = 44 , kcsGetBootPartitionStatus = 44 ,
  kdgLowPowerMode = 70 , kdgReturnDeviceID = 120 , kdgGetCDDeviceInfo = 121
}
 
enum  {
  kdgVersion , kdgDeviceType , kdgInterface , kdgSync ,
  kdgBoot , kdgWide = FOUR_CHAR_CODE('wide') , kdgPurge , kdgSupportsSwitching ,
  kdgMin3VPower , kdgMin5VPower , kdgMax3VPower , kdgMax5VPower ,
  kdgInHighPower , kdgSupportsPowerCtl , kdgAPI = FOUR_CHAR_CODE('dAPI') , kdgEject ,
  kdgFlush = FOUR_CHAR_CODE('flus') , kdgVMOptions , kdgMediaInfo = FOUR_CHAR_CODE('minf') , kdgPhysDriveIconSuite ,
  kdgMediaIconSuite , kdgMediaName , kdgGetDriveAddInfo , kdcAddDriveWithInfo ,
  kdgATADev1 = FOUR_CHAR_CODE('dev1') , kdgDeviceReference , kdgNameRegistryEntry , kdgDeviceModelInfo ,
  kdgSupportedMediaTypes , kdgOpenFirmwareBootSupport , kdgOpenFirmwareBootingSupport
}
 
enum  { kdcFlush = FOUR_CHAR_CODE('flus') , kdcVMOptions }
 
enum  {
  kdgDiskType = FOUR_CHAR_CODE('disk') , kdgTapeType = FOUR_CHAR_CODE('tape') , kdgPrinterType = FOUR_CHAR_CODE('prnt') , kdgProcessorType = FOUR_CHAR_CODE('proc') ,
  kdgWormType = FOUR_CHAR_CODE('worm') , kdgCDType = FOUR_CHAR_CODE('cdrm') , kdgFloppyType = FOUR_CHAR_CODE('flop') , kdgScannerType = FOUR_CHAR_CODE('scan') ,
  kdgFileType , kdgRemovableType
}
 
enum  {
  kdgScsiIntf = FOUR_CHAR_CODE('scsi') , kdgPcmciaIntf = FOUR_CHAR_CODE('pcmc') , kdgATAIntf = FOUR_CHAR_CODE('ata ') , kdgUSBIntf = FOUR_CHAR_CODE('usb ') ,
  kdgFireWireIntf = FOUR_CHAR_CODE('fire') , kdgExtBus = FOUR_CHAR_CODE('card') , kdgNetworkIntf = FOUR_CHAR_CODE('net ')
}
 
enum  {
  kbCloseOk = 0 , kbRemoveOk = 1 , kbPurgeOk = 2 , kmNoCloseNoPurge = 0 ,
  kmOkCloseNoPurge = (1 << kbCloseOk) + (1 << kbRemoveOk) , kmOkCloseOkPurge = (1 << kbCloseOk) + (1 << kbRemoveOk) + (1 << kbPurgeOk)
}
 
enum  { kRestartDontEject = 0 , kShutDownDontEject = 1 , kRestartDontEject_Mask = 1 << kRestartDontEject , kShutDownDontEject_Mask = 1 << kShutDownDontEject }
 
enum  {
  kAllowVMReadBit = 0 , kAllowVMWriteBit = 1 , kAllowVMNoneMask = 0 , kAllowVMReadOnlyMask = 1 << kAllowVMReadBit ,
  kAllowVMReadWriteMask = (1 << kAllowVMReadBit) + (1 << kAllowVMWriteBit)
}
 
enum  {
  driveInfoInteractBit , driveInfoInteractMask , driveInfoChangedBit , driveInfoChangedMask ,
  driveInfoDriverReservedMask , driveInfoSystemReservedMask
}
 
enum  {
  kMediaTypeUnknown = 128 , kMediaTypeCDROM = 129 , kMediaTypeDVDROM = 130 , kMediaTypeDVDRAM = 131 ,
  kMediaTypeDVDR = 132 , kMediaTypeReadOnly = 133 , kMediaTypeWriteOnce = 134 , kMediaTypeRewritable = 135 ,
  kMediaTypeOverwritable = 136 , kMediaTypeNoMedia = -1
}
 
enum  { kInfoStructStringPtrsVers1 = 1 }
 
enum  { kOFBootAnyPartition = 1 , kOFBootSpecifiedPartition = 2 , kOFBootNotBootable = 3 , kOFBootNotPartitioned = 4 }
 
enum  { cdFeatureFlagsMask , cdTransportMask = 0x0003 }
 
enum  {
  cdPowerInject = 0 , cdNotPowerEject = 1 , cdMute = 2 , cdLeftToChannel = 3 ,
  cdRightToChannel = 4 , cdLeftPlusRight = 5 , cdSCSI_2 = 10 , cdStereoVolume = 11 ,
  cdDisconnect = 12 , cdWriteOnce = 13 , cdLockableButton = 14 , cdExtendedFeatures = 15 ,
  cdPowerInject_Mask = 1 << cdPowerInject , cdNotPowerEject_Mask = 1 << cdNotPowerEject , cdMute_Mask = 1 << cdMute , cdLeftToChannel_Mask = 1 << cdLeftToChannel ,
  cdRightToChannel_Mask = 1 << cdRightToChannel , cdLeftPlusRight_Mask = 1 << cdLeftPlusRight , cdSCSI_2_Mask = 1 << cdSCSI_2 , cdStereoVolume_Mask = 1 << cdStereoVolume ,
  cdDisconnect_Mask = 1 << cdDisconnect , cdWriteOnce_Mask = 1 << cdWriteOnce , cdLockableButton_Mask = 1 << cdLockableButton , cdExtendedFeatures_Mask = 1 << cdExtendedFeatures
}
 
enum  { cdCaddy = 0 , cdTray = cdPowerInject_Mask , cdLid = cdNotPowerEject_Mask }
 
enum  {
  cdDVDROM = 0 , cdDVDR = 1 , cdDVDRAM = 2 , cdDVDAudio = 3 ,
  cdDVDRW = 4 , cdCDRom = 5 , cdCDR = 6 , cdCDRW = 7 ,
  cdDVDROM_Mask = 1 << cdDVDROM , cdDVDR_Mask = 1 << cdDVDR , cdDVDRAM_Mask = 1 << cdDVDRAM , cdDVDAudio_Mask = 1 << cdDVDAudio ,
  cdDVDRW_Mask = 1 << cdDVDRW , cdCDRom_Mask = 1 << cdCDRom , cdCDR_Mask = 1 << cdCDR , cdCDRW_Mask = 1 << cdCDRW
}
 
enum  {
  kRegisterPartition = 50 , OLD_REGISTER_PARTITION = 301 , THE_DRIVE = 0 , THE_PHYS_START = 1 ,
  THE_PHYS_SIZE = 2 , kGetADrive = 51 , OLD_GET_A_DRIVE = 302 , THE_VAR_QUEL = 0 ,
  kProhibitMounting = 52 , kOldProhibitMounting = 2100 , kProhibitDevice = 0 , kIsContainerMounted = 53 ,
  kOldIsContainerMounted = 2201 , kContainerVRef = 0 , kContainerParID = 1 , kContainerName = 2 ,
  kContainerResponse = 3 , kMountVolumeImg = 54 , OLD_MOUNT_VOLUME_IMG = 2000 , MV_HOST_VREFNUM = 0 ,
  MV_HOST_PAR_ID = 1 , MV_HOST_NAME = 2 , MV_REQ_PERM = 3
}
 
enum  {
  kGetPartitionStatus = 50 , kOldGetPartitionStatus = 2200 , kDeviceToQuery = 0 , kDeviceResponse = 1 ,
  kGetPartInfo , kOldGetPartInfo = 2300 , kPartInfoResponse , kGetContainerAlias = 52 ,
  kOldGetContainerAlias = 2400 , kGetAliasResponse
}
 
enum  { DRIVER_NOT_INSTALLED = -1 , DRIVER_BUSY = -2 , CANT_MOUNT_WITHIN_THIS_FS , VOLUME_ALREADY_MOUNTED = -4 }
 
enum  { kMaxProhibted }
 
enum  { kGetDriverInfo = FOUR_CHAR_CODE('vdrc') }
 
enum  { kDOSSigLow = 0x01FE , kDOSSigHi = 0x01FF , kDOSSigValLo = 0x55 , kDOSSigValHi = 0xAA }
 

Detailed Description

Driver Gestalt interfaces.

Introduced In: Mac OS 9
Avaliable From: Universal Interfaces 3.4.1
Copyright: � 1995-2001 by Apple Computer, Inc., all rights reserved

For bug reports, consult the following page on the World Wide Web:

http://developer.apple.com/bugreporter/

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

kdgGetDriveAddInfo/kdcAddDriveWithInfo is used by the Alias Manager to assist in the remounting of container files. eg DiskCopy. The driver can use it to store whatever information it needs to remount a drive For example the Volume name and FileID.. What is in here is entirely dependant on the driver, we never interpret it.

This extension to the Alias Manager works as such:

When creating an alias

If driver supports Driver Gestalt, the Alias Mgr calls the driver with a kdgGetDriveAddInfo DriverGestalt request.

Inputs to DriverGestalt: ioVRefNum = drive number ioCRefNum = driver refNum csCode = kDriverGestaltCode driverGestaltSelector = kdgGetDriveAddInfo

If the driver supports kdgGetDriveAddInfo, it returns a pointer to the drive's drive information record (DriverGestaltDriveAddInfoResponse*) in the driverGestaltResponse field and returns noErr.

The memory used by the DriverGestaltDriveAddInfoResponse and it's pointed to data, must be previously held by the disk driver with HoldMemory.

If the driver doesn't support kdgGetDriveAddInfo, it returns statusErr.

If noErr, the Alias Mgr stores the drive information record in the alias record (the length of the drive information record data is in the length field).

When resolving an alias:

If driver supports Driver Gestalt, the Alias Mgr holds the drive information record in the alias with HoldMemory and then calls the driver with a kdcAddDriveWithInfo DriverConfigure request.

Inputs to DriverConfigure: ioCRefNum = driver refNum csCode = kDriverConfigureCode driverGestaltSelector = pointer to DriverGestaltDriveAddInfoResponse

If the driver supports kdcAddDriveWithInfo, it uses the information in the drive information record to add a drive to the drive queue. If the drive is added, the driver returns noErr and returns the drive number in the ioVRefNum field of the parameter block.

If the drive cannot be added (but kdcAddDriveWithInfo is supported), the driver returns nsDrvErr.

If the driver doesn't support kdcAddDriveWithInfo, it returns controlErr.

If noErr is returned, but the data in the drive information record is not up-to-date, the driver should set driveInfoChangedBit in the options field of the drive information record.

If driveInfoInteractBit in the options field is set at input, the driver may perform user interaction to mount the drive.

If noErr, the Alias Mgr tries to resolve the alias the rest of the way.

◆ anonymous enum

anonymous enum

Flags for extendedCdFeatures field Only valid when cdExtendedFeatures_Mask bit of cdFeatures field is set