/// <summary> /// initialize the restriction of target info /// </summary> /// <param name="targetInfo">the target info collection</param> private void InitializeRestriction( ICollection <AV_PAIR> targetInfo ) { // update the MsAvRestrictions of targetInfo // MachineID (32 bytes): A 256-bit random number created at computer // startup to identify the calling machine. Restriction_Encoding restriction = new Restriction_Encoding(); // defines the length, in bytes, of AV_PAIR Value. restriction.Size = 0x30; restriction.MachineID = new byte[NlmpUtility.MACHINE_ID_SIZE]; byte[] restrictionBytes = NlmpUtility.StructGetBytes(restriction); if (NlmpUtility.AvPairContains(targetInfo, AV_PAIR_IDs.MsAvRestrictions)) { NlmpUtility.UpdateAvPair( targetInfo, AV_PAIR_IDs.MsAvRestrictions, (ushort)restrictionBytes.Length, restrictionBytes); } else { NlmpUtility.AddAVPair( targetInfo, AV_PAIR_IDs.MsAvRestrictions, (ushort)restrictionBytes.Length, restrictionBytes); } }
//If the ClientChannelBindingsUnhashed (section 3.1.1.2) is not NULL private void InitializeMsAvChannelBindings( ICollection <AV_PAIR> targetInfo ) { // update the MsAvChannelBinding of targetInfo // add an AV_PAIR structure (section 2.2.2.1) and set the AvId field to MsvAvChannelBindings and the Value field to Z(16). var value = NlmpUtility.Z(16); if (NlmpUtility.AvPairContains(targetInfo, AV_PAIR_IDs.MsvChannelBindings)) { NlmpUtility.UpdateAvPair( targetInfo, AV_PAIR_IDs.MsvChannelBindings, (ushort)value.Length, value); } else { NlmpUtility.AddAVPair( targetInfo, AV_PAIR_IDs.MsvChannelBindings, (ushort)value.Length, value); } }
// If ClientSuppliedTargetName (section 3.1.1.2) is not NULL private void InitializeMsvAvTargetName( ICollection <AV_PAIR> targetInfo ) { // update the MsvAvTargetName of targetInfo // Add an AV_PAIR structure (section 2.2.2.1) and set the AvId field to MsvAvTargetName and the Value field to ClientSuppliedTargetName without terminating NULL. byte[] targetName = NlmpUtility.Unicode(this.credential.TargetName); if (NlmpUtility.AvPairContains(targetInfo, AV_PAIR_IDs.MsvAvTargetName)) { NlmpUtility.UpdateAvPair( targetInfo, AV_PAIR_IDs.MsvAvTargetName, (ushort)targetName.Length, targetName); } else { NlmpUtility.AddAVPair( targetInfo, AV_PAIR_IDs.MsvAvTargetName, (ushort)targetName.Length, targetName); } }
/// <summary> /// initialize the MsAvFlags of target info /// </summary> /// <param name="targetInfo">the target info collection</param> private void InitializeMsAvFlags( ICollection <AV_PAIR> targetInfo ) { // update the MsvAvFlags of targetInfo if (NlmpUtility.AvPairContains(targetInfo, AV_PAIR_IDs.MsvAvFlags)) { uint value = NlmpUtility.BytesToSecurityUInt32( NlmpUtility.AvPairGetValue(targetInfo, AV_PAIR_IDs.MsvAvFlags) ); // if AvId field set to MsvAvFlags, set the 0x02 bit to 1. value |= 0x02; byte[] newValue = NlmpUtility.SecurityUInt32GetBytes(value); NlmpUtility.UpdateAvPair(targetInfo, AV_PAIR_IDs.MsvAvFlags, (ushort)newValue.Length, newValue); } else { // if AvId field set to MsvAvFlags, set the 0x02 bit to 1. uint value = 0x02; byte[] newValue = NlmpUtility.SecurityUInt32GetBytes(value); NlmpUtility.AddAVPair(targetInfo, AV_PAIR_IDs.MsvAvFlags, (ushort)newValue.Length, newValue); } }