3.2.4 Message Processing Events and Sequencing Rules

This protocol MUST indicate to the RPC runtime that it is to perform a strict Network Data Representation (NDR) data consistency check at target level 6.0, as specified in section 3 of [MS-RPCE].

This protocol MUST indicate to the RPC runtime that it is to reject a NULL unique or full pointer with nonzero conformant value, as specified in section 3 of [MS-RPCE].

The server MUST fail a method with error 0x80070548 (ERROR_INVALID_SERVER_STATE) if the server's Prepare State (3.2.1) is not correct for that method. The required Prepare State is as follows:

Once the server's Prepare State is Online, it remains Online until the DCOM object exporter removes the application-specific state associated with the IClusterStorage2 interface, as specified in [MS-DCOM] section 1.3.6.

A ClusPrepDisk object has three state variables, as specified in section 3.2.1: ClusPrepDisk.AttachedState, ClusPrepDisk.OwnedState, and ClusPrepDisk.OnlineState. These states are related as follows:

  • ClusPrepDisk.AttachedState MUST be Attached in order for ClusPrepDisk.OwnedState to be OwnedByThisServer.

  • ClusPrepDisk.OwnedState MUST be OwnedByThisServer in order for ClusPrepDisk.OnlineState to be Online.

Methods in the protocol that take a CPREP_DISKID (section 2.2.2) as an input parameter have requirements on the values of ClusPrepDisk.AttachedState, ClusPrepDisk.OwnedState, and ClusPrepDisk.OnlineState. The server MUST accept the following methods regardless of the values of ClusPrepDisk.AttachedState, ClusPrepDisk.OwnedState, and ClusPrepDisk.OnlineState:

For the following methods, the server MUST require that the value of ClusPrepDisk.AttachedState is equal to Attached:

For the following methods, the server MUST additionally require that the value of ClusPrepDisk.OwnedState is equal to OwnedByThisServer:

For the following methods, the server MUST additionally require that the value of ClusPrepDisk.OnlineState is equal to Online:

For methods that take a CPREP_DISKID (section 2.2.2) as an input parameter, the server MUST look in the ClusPrepDiskList for a ClusPrepDisk object that matches the CPREP_DISKID input parameter. If no such object is found, the server SHOULD<12> return 0x80070002 (ERROR_FILE_NOT_FOUND). If the CPREP_DISKID provided by the client matches more than one ClusPrepDisk in the server's ClusPrepDiskList, then the server SHOULD execute the method for one of the matching ClusPrepDisk objects. The matching ClusPrepDisk that the server chooses is arbitrary and implementation-specific.

For those methods listed previously that take a CPREP_DISKID as an input parameter and require that ClusPrepDisk.AttachedState is equal to Attached (or that ClusPrepDisk.OwnedState is equal to OwnedByThisServer or that ClusPrepDisk.OnlineState is equal to Online), the server SHOULD<13> fail the method with 0x8007139F (ERROR_INVALID_STATE) if the matching ClusPrepDisk.AttachedState is not equal to Attached.

For those methods listed previously that take a CPREP_DISKID as an input parameter and require that ClusPrepDisk.OwnedState is equal to OwnedByThisServer (or that ClusPrepDisk.OnlineState is equal to Online), the server MUST fail with error 0x8007139F (ERROR_INVALID_STATE) if the matching ClusPrepDisk.OwnedState is not equal to OwnedByThisServer.

For those methods listed previously that take a CPREP_DISKID as an input parameter and require that ClusPrepDisk.OnlineState is equal to Online, the server MUST fail with error 0x8007139F (ERROR_INVALID_STATE) if the matching ClusPrepDisk.OnlineState is not equal to Online.

For those methods that take a ulPartition as the partition number, the server MUST use an implementation-specific mechanism to map the partition identified by ulPartition to a volume. If ulPartition cannot be mapped to a volume, then the server MUST return ERROR_FILE_NOT_FOUND.

For those methods that access a volume through a file system, the server MUST use an implementation-specific mechanism to verify that the volume contains a file system. If the volume does not contain a file system, then the server MUST return ERROR_UNRECOGNIZED_VOLUME.

All methods MUST NOT throw exceptions.

This DCOM interface inherits the IUnknown interface. Method opnum field values start with 3; opnum values 0 through 2 represent the IUnknown::QueryInterface, IUnknown::AddRef, and IUnknown::Release methods, respectively, as specified in [MS-DCOM] section 3.1.1.5.8.

Methods in RPC Opnum Order

Method

Description

CprepDiskRawRead

Reads a given sector on a disk.

Opnum: 3

CprepDiskRawWrite

Writes to a given sector on a disk.

Opnum: 4

CprepPrepareNode

A setup method called before other methods.

Opnum: 5

CprepPrepareNodePhase2

Determines the number of disks that are accessible to the server and implement the target role in the SCSI-3 protocol [SPC-3] on the system.

Opnum: 6

CprepDiskGetProps

Gets the properties about a given ClusPrepDisk.

Opnum: 7

Opnum8NotUsedOnWire

This method is not called.

Opnum: 8

Opnum9NotUsedOnWire

This method is not called.

Opnum: 9

Opnum10NotUsedOnWire

This method is not called.

Opnum: 10

Opnum11NotUsedOnWire

This method is not called.

Opnum: 11

CprepDiskStopDefense

Stops any ownership defense started by CprepDiskPRArbitrate for a disk.

Opnum: 12

CprepDiskOnline

Performs the process of transitioning ClusPrepDisk.OnlineState to Online. This method waits for the process of transitioning to be completed and the file systems to be mounted.

Opnum: 13

CprepDiskVerifyUnique

Determines whether multiple ClusPrepDisks have the same signature.

Opnum: 14

Opnum15NotUsedOnWire

This method is not called.

Opnum: 15

Opnum16NotUsedOnWire

This method is not called.

Opnum: 16

CprepDiskWriteFileData

Writes to a given file on a given partition on a given disk.

Opnum: 17

CprepDiskVerifyFileData

Verifies the contents of a given file on a given partition on a given disk.

Opnum: 18

CprepDiskDeleteFile

Deletes a given file on a given partition on a given disk.

Opnum: 19

CprepDiskOffline

Performs the process of transitioning a ClusPrepDisk.OnlineState to a value of Not Online.

Opnum: 20

Opnum21NotUsedOnWire

This method is not called.

Opnum: 21

CprepDiskGetUniqueIds

Retrieves SCSI page 83h data for a given disk.

Opnum: 22

CprepDiskAttach

Performs specific setup for the ClusPrepDisk before executing other methods. If setup is successful, the ClusPrepDisk.AttachedState transitions to Attached.

Opnum: 23

CprepDiskPRArbitrate

Attempts to take ownership of a disk and starts the process to maintain ownership.

Opnum: 24

CprepDiskPRRegister

Adds a SCSI-3 persistent reservation registration to a disk.

Opnum: 25

CprepDiskPRUnRegister

Removes a SCSI-3 persistent reservation registration from a disk.

Opnum: 26

CprepDiskPRReserve

Performs a SCSI-3 persistent reservation reserve to disk.

Opnum: 27

CprepDiskPRRelease

Performs a SCSI-3 persistent reservation release to disk.

Opnum: 28

CprepDiskDiskPartitionIsNtfs

Determines whether a given partition on a given disk has the NT file system (NTFS) file system.

Opnum: 29

CprepDiskGetArbSectors

Gets two free sectors on a given disk for read/write access.

Opnum: 30

CprepDiskIsPRPresent

Determines whether a SCSI-3 persistent reservation is present on a disk.

Opnum: 31

CprepDiskPRPreempt

Performs a SCSI-3 persistent reservation preempt to a disk.

Opnum: 32

CprepDiskPRClear

Performs a SCSI-3 persistent reservation clear on a disk.

Opnum: 33

CprepDiskIsOnline

Determines whether a ClusPrepDisk.OnlineState is equal to Online.

Opnum: 34

CprepDiskSetOnline

Begins the process of transitioning ClusPrepDisk.OnlineState to Online. This method does not wait for the process of transitioning to be completed and for the file systems to be mounted.

Opnum: 35

CprepDiskGetFSName

Returns the name of the file system on a given partition on a given disk.

Opnum: 36

CprepDiskIsReadable

Determines whether the disk can be read.

Opnum: 37

CprepDiskGetDsms

Gets MPIO device driver information.

Opnum: 38