4.1.10.4.3 PerformExtendedOpRequestMsg
-
procedure PerformExtendedOpRequestMsg ( hDrs: DRS_HANDLE, version: DWORD, nc: DSName, roleOwnerObject: DSName, rf: RepsFrom, ulFlags: ULONG, ulMoreFlags: ULONG, ulExtendedOp: ULONG, cMaxObjects: ULONG, cMaxBytes: ULONG, var msgRequest: DRS_MSG_GETCHGREQ): DWORD
Informative summary of behavior: A client sends an IDL_DRSGetNCChanges request to a server to perform an extended operation. The procedure PerformExtendedOpRequestMsg specifies how the request message is constructed for this operation.
The arguments for this method are the same as those for the procedure ReplicateNCRequestMsg, with the following exceptions:
ulExtendedOp: The requested extended operation. The client MUST supply the same value of this field for each request in a given replication cycle. The possible values are:
EXOP_FSMO_REQ_ROLE, for a FSMO role owner transfer.
EXOP_FSMO_REQ_RID_ALLOC, for a RID allocation from the RID Master FSMO role owner.
EXOP_FSMO_RID_REQ_ROLE, for transfer of the RID Master FSMO role.
EXOP_FSMO_REQ_PDC, for transfer of the PDC FSMO role.
EXOP_FSMO_ABANDON_ROLE, to request the server to request an extended operation role transfer from the client.
roleOwnerObject: The client sets this value based on the value of ulExtendedOp, as per the following table:
ulExtendedOp
roleOwnerObject
EXOP_FSMO_REQ_ROLE
The DSName of the FSMO role object.
EXOP_FSMO_REQ_RID_ALLOC
The value of the rIDManagerReference attribute of DefaultNC().
EXOP_FSMO_RID_REQ_ROLE
The value of the rIDManagerReference attribute of DefaultNC().
EXOP_FSMO_REQ_PDC
DefaultNC().
EXOP_FSMO_ABANDON_ROLE
The DSName of the FSMO role object.
The procedure returns a Windows error code if it not able to construct msgRequest.
-
msgIn: DRS_MSG_GETCHGREQ_V10 serverObj: DSName computerObj: DSName ridSetReferences: DSName /* An NC replica with root nc must already exist on the client */ if (not MasterReplicaExists(nc)) then return ERROR_DS_DRA_BAD_NC endif msgIn.ulFlags := ulFlags msgIn.ulMoreFlags := ulMoreFlags msgIn.cMaxObjects := cMaxObjects msgIn.cMaxBytes := cMaxBytes msgIn.ulExtendedOp := ulExtendedOp msgIn.uuidDsaObjDest := dc.serverGuid msgIn.pNC := ADR(roleOwnerObject) msgIn.pUpToDateVecDest := ConcreteFromAbstractUTD(nc!replUpToDateVector) msgIn.pPartialAttrSetEx := null msgIn.pPartialAttrSet := null msgIn.PrefixTableDest := 0 if (ulExtendedOp = EXOP_FSMO_REQ_RID_ALLOC) then serverObj := DSAObj()!parent computerObj := serverObject!serverReference ridSetReferences := computerObj!ridSetReferences if ((not ridSetReferences = null) and (ridSetReferences!isDeleted = false)) and (not ridSetReferences!rIDNextRid = null) and (not ridSetReferences!rIDNextRid = 0) and (not ridSetReferences!rIDAllocationPool = null)) then msgIn.liFsmoInfo := ridSetReferences!rIDAllocationPool else msgIn.liFsmoInfo := 0 endif else msgIn.liFsmoInfo := 0 endif /* Fill usnvecFrom and uuidInvocIdSrc fields. * usnvecFrom: This field contains the value of the usnVec field in * RepsFrom tuple corresponding to the IDL_DRSGetNCChanges server * DC, or zeros if no such repsFrom is present. * uuidInvocIdSrc: If the usnvecFrom field is not zeros, this field * MUST contain the uuidInvocId from the same tuple from which the * usnVec field was retrieved. Otherwise, this field contains * zeros.*/ if (rf = null) then msgIn.usnvecFrom := 0 msgIn.uuidInvocIdSrc := 0 else msgIn.usnvecFrom := rf.usnVec msgIn.uuidInvocIdSrc := rf.uuidInvocId endif if version = 5 then msgRequest.V5 := msgIn msgRequest.V5.pUpToDateVecDestV1 := msgIn.pUpToDateVecDest else if version = 8 then msgRequest.V8 := msgIn else msgRequest.V10 := msgIn endif return 0