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:
CprepPrepareNode (section 3.2.4.3) requires Prepare State Initial.
CprepPrepareNodePhase2 (section 3.2.4.4) requires Prepare State Preparing.
All other methods require Prepare State Online.
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 |
Gets MPIO device driver information. Opnum: 38 |