3.6.4.1 Message Processing on PDC

After the PDC protocol initialization, the PDC MUST prepare an initial announcement message as follows:

  • Set LowSerialNumber to the low DWORD part of AbstractSamDatabaseSerialNumber.

  • Set DateAndTime to the value of AbstractSamDatabaseCreationTime expressed as the number of seconds elapsed since midnight of January 1, 1970.

  • Set Pulse to the value of AbstractPulse.

  • Set Random to the value of AbstractRandom.

  • Set PrimaryDCName to the value of AbstractPrimaryDCName encoded in the OEM character set.

  • Set DomainName to the value of AbstractDomainName encoded in the OEM character set.

  • Optionally set Pad to 0x00 to make the next field in the message 2-byte aligned.

  • Set UnicodePrimaryDCName to the value of AbstractPrimaryDCName encoded in Unicode.

  • Set UnicodeDomainName to the value of AbstractDomainName encoded in Unicode.

  • Set DBCount to 0x3.

  • Set three DBChangeInfo fields as follows:

    • Set DBIndex of the 1st DBChangeInfo field to 0x0.

      Set LargeSerialNumber of the 1st DBChangeInfo field to the value of AbstractSamDatabaseSerialNumber.

      Set DateAndTime of the 1st DBChangeInfo field to the value of AbstractSamDatabaseCreationTime.

    • Set DBIndex of the 2nd DBChangeInfo field to 0x1.

      Set LargeSerialNumber of the 2nd DBChangeInfo field to the value of AbstractBuiltinDatabaseSerialNumber.

      Set DateAndTime of the 2nd DBChangeInfo field to the value of AbstractBuiltinDatabaseCreationTime.

    • Set DBIndex of the 3rd DBChangeInfo field to 0x2.

      Set LargeSerialNumber of the 3rd DBChangeInfo field to the value of AbstractLsaDatabaseSerialNumber.

      Set DateAndTime of the 3rd DBChangeInfo field to the value of AbstractLsaDatabaseCreationTime.

  • Set DBCount to 0x3.

  • Set DomainSidSize to the size in bytes of AbstractDomainSid.

  • Set DomainSid to the value of AbstractDomainSid.

The PDC MUST send the message to all BDCs configured in the domain. In response to this message, the PDC MUST expect BDCs to synchronize their database by calling NetrDatabaseSync, NetrDatabaseSync2, or NetrDatabaseDeltas, as defined in the following. For details about calling this method, see Calling NetrDatabaseSync2 in section 3.4.5.4.2.

In processing the NetrDatabaseDeltas call, the PDC SHOULD<267> indicate to the caller that it's unable to fulfill the partial synchronization request due to local conditions. The BDC MUST handle the error by performing full synchronization as defined in the following.

When processing NetrDatabaseSync, NetrDatabaseSync2, or NetrDatabaseDeltas calls, the PDC MUST update the AbstractBdcDatabaseSerialNumbers element corresponding to the database of the BDC making the call to be equal to the value of the database serial number for the last database record returned by the call.