4.3 Binary Group Expansion

This sample illustrates the messages used in the Binary Group Expansion Interface. In this example, a client uses the IsPrincipalMemberOf operation to determine whether the user "mail=user1@contoso.com" is a mesmber of either of two target groups: "mail=group1_1@contoso.com" and "mail=group2@contoso.com".

The client creates a Serialized Octet Stream containing an IsPrincipalMemberOfRequest record. The network capture of this stream is as follows.

 0000 00 01 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 .....ÿÿÿÿ.......
 0010 00 15 14 00 00 00 12 13 49 73 50 72 69 6E 63 69 ........IsPrinci
 0020 70 61 6C 4D 65 6D 62 65 72 4F 66 12 F3 01 73 6F palMemberOf.ó.so
 0030 61 70 3A 52 65 6D 6F 74 65 41 63 74 69 76 65 44 ap:RemoteActiveD
 0040 69 72 65 63 74 6F 72 79 53 65 72 76 69 63 65 73 irectoryServices
 0050 2C 20 68 74 74 70 3A 2F 2F 73 63 68 65 6D 61 73 , http://schemas
 0060 2E 6D 69 63 72 6F 73 6F 66 74 2E 63 6F 6D 2F 63 .microsoft.com/c
 0070 6C 72 2F 6E 73 61 73 73 65 6D 2F 4D 69 63 72 6F lr/nsassem/Micro
 0080 73 6F 66 74 2E 44 69 67 69 74 61 6C 52 69 67 68 soft.DigitalRigh
 0090 74 73 4D 61 6E 61 67 65 6D 65 6E 74 2E 44 69 72 tsManagement.Dir
 00A0 65 63 74 6F 72 79 53 65 72 76 69 63 65 73 2F 50 ectoryServices/P
 00B0 6C 75 67 69 6E 2E 44 69 72 65 63 74 6F 72 79 53 lugin.DirectoryS
 00C0 65 72 76 69 63 65 73 25 32 43 25 32 30 56 65 72 ervices%2C%20Ver
 00D0 73 69 6F 6E 25 33 44 35 2E 32 2E 33 37 39 30 2E sion%3D5.2.3790.
 00E0 33 30 30 25 32 43 25 32 30 43 75 6C 74 75 72 65 300%2C%20Culture
 00F0 25 33 44 6E 65 75 74 72 61 6C 25 32 43 25 32 30 %3Dneutral%2C%20
 0100 50 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6E 25 33 PublicKeyToken%3
 0110 44 33 31 62 66 33 38 35 36 61 64 33 36 34 65 33 D31bf3856ad364e3
 0120 35 10 01 00 00 00 05 00 00 00 06 02 00 00 00 16 5...............
 0130 6D 61 69 6C 3D 75 73 65 72 31 40 63 6F 6E 74 6F mail=user1@conto
 0140 73 6F 2E 63 6F 6D 09 02 00 00 00 09 03 00 00 00 so.com..........
 0150 08 08 01 00 00 00 0A 11 03 00 00 00 02 00 00 00 ................
 0160 06 04 00 00 00 19 6D 61 69 6C 3D 67 72 6F 75 70 ......mail=group
 0170 31 5F 31 40 63 6F 6E 74 6F 73 6F 2E 63 6F 6D 06 1_1@contoso.com.
 0180 05 00 00 00 17 6D 61 69 6C 3D 67 72 6F 75 70 32 .....mail=group2
 0190 40 63 6F 6E 74 6F 73 6F 2E 63 6F 6D 0B          @contoso.com.

The bytes listed in the preceding sample can be mapped to the logical request message as follows. The Binary Group Expansion Interface message structures are mapped as specified in section 2.3.

 SerializationHeaderRecord:
     RecordTypeEnum: SerializedStreamHeader (0x00)
     RootId: 1
     Reserved0: -1
     MajorVersion: 1
     MinorVersion: 0
 IsPrincipalMemberOfRequest:
     RecordTypeEnum: MethodCall (0x15)
     MessageEnum: 0x14 (ArgsIsArray, NoContext)
     MethodName:
         StringValueWithCode:
             PrimitiveTypeEnum: String (0x12)
             StringValue: IsPrincipalMemberOf
     TypeName:
         StringValueWithCode:
             PrimitiveTypeEnum: String (0x12)
             StringValue: soap:RemoteActiveDirectoryServices, http://schemas.microsoft.com/clr/nsassem/Microsoft.DigitalRightsManagement.DirectoryServices/Plugin.DirectoryServices%2C%20Version%3D5.2.3790.300%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D31bf3856ad364e35
     ArgumentsArray:
         ArgumentsArray:
             RecordTypeEnum: ArraySingleObject (0x10)
             ObjectId: 1
             Length: 5
             Principal:
                 BinaryObjectString:
                 RecordTypeEnum: BinaryObjectString (0x06)
                     ObjectId: 2
                     Value: mail=user1@contoso.com
             PrincipalCrossForest:
                 MemberReference:
                     RecordTypeEnum: MemberReference (0x09)
                     IdRef: 2
             TargetGroups:
                 MemberReference:
                     RecordTypeEnum: MemberReference (0x09)
                     IdRef: 3
             CrossForestCallsSoFar:
                 MemberPrimitiveTyped:
                     RecordTypeEnum: MemberPrimitiveTyped (0x08)
                     PrimitiveTypeEnum: Int32 (0x08)
                     Value: 1
             ObjectNull:
                 ObjectNull:
                     RecordTypeEnum: ObjectNull (0x0A)
     TargetGroups:
         ArraySingleString:
             RecordTypeEnum: ArraySingleString (0x11)
             ObjectId: 3
             Length: 2
             Values:
                 BinaryObjectString:
                     RecordTypeEnum: BinaryObjectString (0x06)
                     ObjectId: 4
                     Value: mail=group1_1@contoso.com
                 BinaryObjectString:
                     RecordTypeEnum: BinaryObjectString (0x06)
                     ObjectId: 5
                     Value: mail=group2@contoso.com
 MessageEnd:
     RecordTypeEnum: MessageEnd (0x0B)
  

In this example, the Principal field of the ArgumentsArray contains the value "mail=user1@contoso.com" encoded as a BinaryObjectString record. The TargetGroups array contains two groups: "mail=group1_1@contoso.com" and "mail=group2@contoso.com", each specified as BinaryObjectString records.

The server determines in an implementation-specific way that the specified Principal is a member of one of the TargetGroups. It creates a Serialized Octet Stream containing an IsPrincipalMemberOfResponse record to return to the client. The network capture of this stream is as follows.

 0000 00 01 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 .....ÿÿÿÿ.......
 0010 00 16 48 08 00 00 01 01 10 01 00 00 00 02 00 00 ..H.............
 0020 00 09 02 00 00 00 09 03 00 00 00 10 02 00 00 00 ................
 0030 05 00 00 00 0D 04 09 04 00 00 00 04 03 00 00 00 ................
 0040 34 53 79 73 74 65 6D 2E 52 75 6E 74 69 6D 65 2E 4System.Runtime.
 0050 52 65 6D 6F 74 69 6E 67 2E 4D 65 73 73 61 67 69 Remoting.Messagi
 0060 6E 67 2E 4C 6F 67 69 63 61 6C 43 61 6C 6C 43 6F ng.LogicalCallCo
 0070 6E 74 65 78 74 00 00 00 00 0C 05 00 00 00 60 50 ntext.........`P
 0080 6C 75 67 69 6E 2E 44 69 72 65 63 74 6F 72 79 53 lugin.DirectoryS
 0090 65 72 76 69 63 65 73 2C 20 56 65 72 73 69 6F 6E ervices, Version
 00A0 3D 35 2E 32 2E 33 37 39 30 2E 33 30 30 2C 20 43 =5.2.3790.300, C
 00B0 75 6C 74 75 72 65 3D 6E 65 75 74 72 61 6C 2C 20 ulture=neutral,
 00C0 50 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6E 3D 33 PublicKeyToken=3
 00D0 31 62 66 33 38 35 36 61 64 33 36 34 65 33 35 0C 1bf3856ad364e35.
 00E0 06 00 00 00 4C 53 79 73 74 65 6D 2C 20 56 65 72 ....LSystem, Ver
 00F0 73 69 6F 6E 3D 31 2E 30 2E 35 30 30 30 2E 30 2C sion=1.0.5000.0,
 0100 20 43 75 6C 74 75 72 65 3D 6E 65 75 74 72 61 6C  Culture=neutral
 0110 2C 20 50 75 62 6C 69 63 4B 65 79 54 6F 6B 65 6E , PublicKeyToken
 0120 3D 62 37 37 61 35 63 35 36 31 39 33 34 65 30 38 =b77a5c561934e08
 0130 39 05 04 00 00 00 3D 4D 69 63 72 6F 73 6F 66 74 9.....=Microsoft
 0140 2E 44 69 67 69 74 61 6C 52 69 67 68 74 73 4D 61 .DigitalRightsMa
 0150 6E 61 67 65 6D 65 6E 74 2E 44 69 72 65 63 74 6F nagement.Directo
 0160 72 79 53 65 72 76 69 63 65 73 2E 50 72 69 6E 63 ryServices.Princ
 0170 69 70 61 6C 0A 00 00 00 15 5F 50 72 69 6E 63 69 ipal....._Princi
 0180 70 61 6C 49 64 65 6E 74 69 66 69 65 72 73 10 5F palIdentifiers._
 0190 47 72 6F 75 70 4D 65 6D 62 65 72 73 68 69 70 0F GroupMembership.
 01A0 5F 46 6F 72 65 69 67 6E 4D 65 6D 62 65 72 73 12 _ForeignMembers.
 01B0 5F 70 61 72 73 69 6E 67 44 69 63 74 69 6F 6E 61 _parsingDictiona
 01C0 72 79 15 5F 43 6F 6E 74 61 69 6E 65 72 4F 62 6A ry._ContainerObj
 01D0 65 63 74 47 75 69 64 73 0E 5F 73 74 72 4F 62 6A ectGuids._strObj
 01E0 65 63 74 47 75 69 64 15 5F 73 74 72 4F 72 69 67 ectGuid._strOrig
 01F0 69 6E 61 74 69 6F 6E 46 6F 72 65 73 74 0E 5F 65 inationForest._e
 0200 78 70 6C 69 63 69 74 50 61 72 73 65 07 5F 65 78 xplicitParse._ex
 0210 69 73 74 73 1A 44 69 72 65 63 74 6F 72 79 4C 6F ists.DirectoryLo
 0220 6F 6B 75 70 58 4D 4C 2B 5F 65 78 69 73 74 73 04 okupXML+_exists.
 0230 03 04 03 04 01 01 04 00 00 2D 53 79 73 74 65 6D .........-System
 0240 2E 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 53 70 65 .Collections.Spe
 0250 63 69 61 6C 69 7A 65 64 2E 4C 69 73 74 44 69 63 cialized.ListDic
 0260 74 69 6F 6E 61 72 79 06 00 00 00 1C 53 79 73 74 tionary.....Syst
 0270 65 6D 2E 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 48 em.Collections.H
 0280 61 73 68 74 61 62 6C 65 2D 53 79 73 74 65 6D 2E ashtable-System.
 0290 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 53 70 65 63 Collections.Spec
 02A0 69 61 6C 69 7A 65 64 2E 4C 69 73 74 44 69 63 74 ialized.ListDict
 02B0 69 6F 6E 61 72 79 06 00 00 00 1E 53 79 73 74 65 ionary.....Syste
 02C0 6D 2E 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 49 44 m.Collections.ID
 02D0 69 63 74 69 6F 6E 61 72 79 2F 53 79 73 74 65 6D ictionary/System
 02E0 2E 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 53 70 65 .Collections.Spe
 02F0 63 69 61 6C 69 7A 65 64 2E 53 74 72 69 6E 67 43 cialized.StringC
 0300 6F 6C 6C 65 63 74 69 6F 6E 06 00 00 00 4F 4D 69 ollection....OMi
 0310 63 72 6F 73 6F 66 74 2E 44 69 67 69 74 61 6C 52 crosoft.DigitalR
 0320 69 67 68 74 73 4D 61 6E 61 67 65 6D 65 6E 74 2E ightsManagement.
 0330 44 69 72 65 63 74 6F 72 79 53 65 72 76 69 63 65 DirectoryService
 0340 73 2E 50 72 69 6E 63 69 70 61 6C 2B 45 78 70 6C s.Principal+Expl
 0350 69 63 69 74 50 61 72 73 65 45 6E 75 6D 05 00 00 icitParseEnum...
 0360 00 01 01 05 00 00 00 09 07 00 00 00 09 08 00 00 ................
 0370 00 0A 0A 09 09 00 00 00 06 0A 00 00 00 20 32 39 ............. 29
 0380 39 32 65 34 66 35 62 65 65 62 64 64 34 62 62 31 92e4f5beebdd4bb1
 0390 30 64 38 32 37 35 38 37 61 61 37 37 35 66 0A 05 0d827587aa775f..
 03A0 F5 FF FF FF 4F 4D 69 63 72 6F 73 6F 66 74 2E 44 oÿÿÿOMicrosoft.D
 03B0 69 67 69 74 61 6C 52 69 67 68 74 73 4D 61 6E 61 igitalRightsMana
 03C0 67 65 6D 65 6E 74 2E 44 69 72 65 63 74 6F 72 79 gement.Directory
 03D0 53 65 72 76 69 63 65 73 2E 50 72 69 6E 63 69 70 Services.Princip
 03E0 61 6C 2B 45 78 70 6C 69 63 69 74 50 61 72 73 65 al+ExplicitParse
 03F0 45 6E 75 6D 01 00 00 00 07 76 61 6C 75 65 5F 5F Enum.....value__
 0400 00 08 05 00 00 00 00 00 00 00 01 01 05 07 00 00 ................
 0410 00 2D 53 79 73 74 65 6D 2E 43 6F 6C 6C 65 63 74 .-System.Collect
 0420 69 6F 6E 73 2E 53 70 65 63 69 61 6C 69 7A 65 64 ions.Specialized
 0430 2E 4C 69 73 74 44 69 63 74 69 6F 6E 61 72 79 04 .ListDictionary.
 0440 00 00 00 04 68 65 61 64 07 76 65 72 73 69 6F 6E ....head.version
 0450 05 63 6F 75 6E 74 08 63 6F 6D 70 61 72 65 72 04 .count.comparer.
 0460 00 00 03 3C 53 79 73 74 65 6D 2E 43 6F 6C 6C 65 ...<System.Colle
 0470 63 74 69 6F 6E 73 2E 53 70 65 63 69 61 6C 69 7A ctions.Specializ
 0480 65 64 2E 4C 69 73 74 44 69 63 74 69 6F 6E 61 72 ed.ListDictionar
 0490 79 2B 44 69 63 74 69 6F 6E 61 72 79 4E 6F 64 65 y+DictionaryNode
 04A0 06 00 00 00 08 08 1C 53 79 73 74 65 6D 2E 43 6F .......System.Co
 04B0 6C 6C 65 63 74 69 6F 6E 73 2E 49 43 6F 6D 70 61 llections.ICompa
 04C0 72 65 72 06 00 00 00 09 0C 00 00 00 02 00 00 00 rer.............
 04D0 02 00 00 00 0A 04 08 00 00 00 1C 53 79 73 74 65 ...........Syste
 04E0 6D 2E 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 48 61 m.Collections.Ha
 04F0 73 68 74 61 62 6C 65 07 00 00 00 0A 4C 6F 61 64 shtable.....Load
 0500 46 61 63 74 6F 72 07 56 65 72 73 69 6F 6E 08 43 Factor.Version.C
 0510 6F 6D 70 61 72 65 72 10 48 61 73 68 43 6F 64 65 omparer.HashCode
 0520 50 72 6F 76 69 64 65 72 08 48 61 73 68 53 69 7A Provider.HashSiz
 0530 65 04 4B 65 79 73 06 56 61 6C 75 65 73 00 00 03 e.Keys.Values...
 0540 03 00 05 05 0B 08 1C 53 79 73 74 65 6D 2E 43 6F .......System.Co
 0550 6C 6C 65 63 74 69 6F 6E 73 2E 49 43 6F 6D 70 61 llections.ICompa
 0560 72 65 72 24 53 79 73 74 65 6D 2E 43 6F 6C 6C 65 rer$System.Colle
 0570 63 74 69 6F 6E 73 2E 49 48 61 73 68 43 6F 64 65 ctions.IHashCode
 0580 50 72 6F 76 69 64 65 72 08 EC 51 38 3F 00 00 00 Provider.ìQ8?...
 0590 00 0A 0A 0B 00 00 00 09 0D 00 00 00 09 0E 00 00 ................
 05A0 00 05 09 00 00 00 2F 53 79 73 74 65 6D 2E 43 6F ....../System.Co
 05B0 6C 6C 65 63 74 69 6F 6E 73 2E 53 70 65 63 69 61 llections.Specia
 05C0 6C 69 7A 65 64 2E 53 74 72 69 6E 67 43 6F 6C 6C lized.StringColl
 05D0 65 63 74 69 6F 6E 01 00 00 00 04 64 61 74 61 03 ection.....data.
 05E0 1C 53 79 73 74 65 6D 2E 43 6F 6C 6C 65 63 74 69 .System.Collecti
 05F0 6F 6E 73 2E 41 72 72 61 79 4C 69 73 74 06 00 00 ons.ArrayList...
 0600 00 09 0F 00 00 00 05 0C 00 00 00 3C 53 79 73 74 ...........<Syst
 0610 65 6D 2E 43 6F 6C 6C 65 63 74 69 6F 6E 73 2E 53 em.Collections.S
 0620 70 65 63 69 61 6C 69 7A 65 64 2E 4C 69 73 74 44 pecialized.ListD
 0630 69 63 74 69 6F 6E 61 72 79 2B 44 69 63 74 69 6F ictionary+Dictio
 0640 6E 61 72 79 4E 6F 64 65 03 00 00 00 03 6B 65 79 naryNode.....key
 0650 05 76 61 6C 75 65 04 6E 65 78 74 02 02 04 3C 53 .value.next...<S
 0660 79 73 74 65 6D 2E 43 6F 6C 6C 65 63 74 69 6F 6E ystem.Collection
 0670 73 2E 53 70 65 63 69 61 6C 69 7A 65 64 2E 4C 69 s.Specialized.Li
 0680 73 74 44 69 63 74 69 6F 6E 61 72 79 2B 44 69 63 stDictionary+Dic
 0690 74 69 6F 6E 61 72 79 4E 6F 64 65 06 00 00 00 06 tionaryNode.....
 06A0 00 00 00 06 10 00 00 00 2F 69 64 3D 73 2D 31 2D ......../id=s-1-
 06B0 35 2D 32 31 2D 38 37 38 33 38 30 32 34 33 2D 31 5-21-878380243-1
 06C0 39 35 38 32 30 39 33 38 36 2D 38 39 36 36 37 39 958209386-896679
 06D0 31 36 38 2D 31 33 34 30 08 01 01 09 11 00 00 00 168-1340........
 06E0 10 0D 00 00 00 00 00 00 00 10 0E 00 00 00 00 00 ................
 06F0 00 00 04 0F 00 00 00 1C 53 79 73 74 65 6D 2E 43 ........System.C
 0700 6F 6C 6C 65 63 74 69 6F 6E 73 2E 41 72 72 61 79 ollections.Array
 0710 4C 69 73 74 03 00 00 00 06 5F 69 74 65 6D 73 05 List....._items.
 0720 5F 73 69 7A 65 08 5F 76 65 72 73 69 6F 6E 05 00 _size._version..
 0730 00 08 08 09 12 00 00 00 02 00 00 00 02 00 00 00 ................
 0740 01 11 00 00 00 0C 00 00 00 06 13 00 00 00 16 6D ...............m
 0750 61 69 6C 3D 75 73 65 72 31 40 63 6F 6E 74 6F 73 ail=user1@contos
 0760 6F 2E 63 6F 6D 08 01 01 0A 10 12 00 00 00 10 00 o.com...........
 0770 00 00 06 14 00 00 00 20 35 62 39 38 64 39 66 31 ....... 5b98d9f1
 0780 36 37 32 30 66 33 34 38 39 38 39 39 64 38 38 39 6720f3489899d889
 0790 33 37 39 35 66 33 61 65 06 15 00 00 00 20 66 32 3795f3ae..... f2
 07A0 61 30 66 30 34 38 33 37 34 35 63 62 34 63 61 32 a0f0483745cb4ca2
 07B0 33 61 34 61 64 63 62 64 36 32 66 32 31 35 0D 0E 3a4adcbd62f215..
 07C0 0B                                              .
  

The bytes listed in the preceding sample can be mapped to the logical response message as follows. The Binary Group Expansion Interface message structures are mapped as specified in section 2.3.

 SerializationHeaderRecord:
     RecordTypeEnum: SerializedStreamHeader (0x00)
     RootId: 1
     Reserved0: -1
     MajorVersion: 1
     MinorVersion: 0
 IsPrincipalMemberOfResponse:
     RecordTypeEnum: MethodReturn (0x16)
     MessageEnum: Ox0848 (ArgsInArray, ContextInArray, ReturnValueInline)
     ReturnValueCode: Boolean (0x01)
     ReturnValue: True (0x01)
     ReturnArray:
         RecordTypeEnum: ArraySingleObject (0x10)
         ObjectId: 1
         Length: 2
         ReturnArguments:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 2
         LogicalCallContext:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 3
 ReturnArgumentsArray:
     RecordTypeEnum: ArraySingleObject (0x10)
     ObjectId: 2
     Length: 5
     NullValues:
         ObjectNullMultiple256:
             RecordTypeEnum: ObjectNullMultiple256 (0x0D)
             NullCount: 4
     Principal:
         MemberReference:
             RecordTypeEnum: MemberReference (0x09)
             IdRef: 4
 LogicalCallContext:
     RecordTypeEnum: SystemClassWithMembersAndTypes (0x04)
     ObjectId: 3
     ClassName: System.Runtime.Remoting.Messaging.LogicalCallContext
     MemberCount: 0
 BinaryLibrary:
     RecordTypeEnum: BinaryLibrary (0x0C)
     LibraryId: 5
     LibraryName: Plugin.DirectoryServices, Version=5.2.3790.300, Culture=neutral, PublicKeyToken=31bf3856ad364e35
 BinaryLibrary:
     RecordTypeEnum: BinaryLibrary (0x0C)
     LibraryId: 6
     LibraryName: System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 Principal:
     RecordTypeEnum: ClassWithMembersAndTypes (0x05)
     ObjectId: 4
     ClassName: Microsoft.DigitalRightsManagement.DirectoryServices.Principal
     MemberCount: 10
     MemberName1: _PrincipalIdentifiers
     MemberName2: _GroupMembership
     MemberName3: _ForeignMembers
     MemberName4: _parsingDictionary
     MemberName5: _ContainerObjectGuids
     MemberName6: _strObjectGuid
     MemberName7: _strOriginationForest
     MemberName8: _explicitParse
     MemberName9: _exists
     MemberName10: DirectoryLookupXML+_exists
     BinaryTypeEnum1: Class (0x04)
     BinaryTypeEnum2: SystemClass (0x03)
     BinaryTypeEnum3: Class (0x04)
     BinaryTypeEnum4: SystemClass (0x03)
     BinaryTypeEnum5: Class (0x04)
     BinaryTypeEnum6: String (0x01)
     BinaryTypeEnum7: String (0x01)
     BinaryTypeEnum8: Class (0x04)
     BinaryTypeEnum9: Primitive (0x00)
     BinaryTypeEnum10: Primitive (0x00)
     AdditionalInfo1TypeName: System.Collections.Specialized.ListDictionary
     AdditionalInfo1LibraryId: 6
     AdditionalInfo2: System.Collections.Hashtable
     AdditionalInfo3TypeName: System.Collections.Specialized.ListDictionary
     AdditionalInfo3LibraryId: 6
     AdditionalInfo4: System.Collections.IDictionary
     AdditionalInfo5TypeName: System.Collections.Specialized.StringCollection
     AdditionalInfo5LibraryId: 6
     AdditionalInfo8TypeName: Microsoft.DigitalRightsManagement.DirectoryServices.Principal+ExplicitParseEnum
     AdditionalInfo8LibraryId: 5
     AdditionalInfo9: Boolean (0x01)
     AdditionalInfo10: Boolean (0x01)
     LibraryId: 5
     SerializedMemberValues:
         MemberValue1:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 7
         MemberValue2:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 8
         MemberValue3:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
         MemberValue4:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
         MemberValue5:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 9
         MemberValue6:
             BinaryObjectString:
                 RecordTypeEnum: BinaryObjectString (0x06)
                 ObjectId: 10
                 Value: 2992e4f5beebdd4bb10d827587aa775f
         MemberValue7:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
         MemberValue8:
             ExplicitParseEnum:
                 RecordTypeEnum: ClassWithMembersAndTypes (0x05)
                 ObjectId: -11
                 ClassName: Microsoft.DigitalRightsManagement.DirectoryServices.Principal+ExplicitParseEnum
                 MemberCount: 1
                 MemberName1: value__
                 BinaryTypeEnum1: Primitive (0x00)
                 AdditionalInfo1: Int32 (0x08)
                 LibraryId: 5
                 SerializedMemberValues:
                     MemberValue1:
                         MemberPrimitiveUnTyped:
                             Value: 0
         MemberValue9:
             MemberPrimitiveUnTyped:
                 Value: True (0x01)
         MemberValue10:
             MemberPrimitiveUnTyped:
                 Value: True (0x01)
 ListDictionary:
     RecordTypeEnum: ClassWithMembersAndTypes (0x05)
     ObjectId: 7
     ClassName: System.Collections.Specialized.ListDictionary
     MemberCount: 4
     MemberName1: head
     MemberName2: version
     MemberName3: count
     MemberName4: comparer
     BinaryTypeEnum1: Class (0x04)
     BinaryTypeEnum2: Primitive (0x00)
     BinaryTypeEnum3: Primitive (0x00)
     BinaryTypeEnum4: SystemClass (0x03)
     AdditionalInfo1TypeName: System.Collections.Specialized.ListDictionary+DictionaryNode
     AdditionalInfo1LibraryId: 6
     AdditionalInfo2: Int32 (0x08)
     AdditionalInfo3: Int32 (0x08)
     AdditionalInfo4: System.Collections.IComparer
     LibraryId: 6
     SerializedMemberValues:
         MemberValue1:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 12
         MemberValue2:
             MemberPrimitiveUnTyped:
                 Value: 2
         MemberValue3:
             MemberPrimitiveUnTyped:
                 Value: 2
         MemberValue4:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
 HashTable:
     RecordTypeEnum: SystemClassWithMembersAndTypes (0x04)
     ObjectId: 8
     ClassName: System.Collections.Hashtable
     MemberCount: 7
     MemberName1: LoadFactor
     MemberName2: Version
     MemberName3: Comparer
     MemberName4: HashCodeProvider
     MemberName5: HashSize
     MemberName6: Keys
     MemberName7: Values
     BinaryTypeEnum1: Primitive (0x00)
     BinaryTypeEnum2: Primitive (0x00)
     BinaryTypeEnum3: SystemClass (0x03)
     BinaryTypeEnum4: SystemClass (0x03)
     BinaryTypeEnum5: Primitive (0x00)
     BinaryTypeEnum6: ObjectArray (0x05)
     BinaryTypeEnum7: ObjectArray (0x05)
     AdditionalInfo1: Single (0x0B)
     AdditionalInfo2: Int32 (0x08)
     AdditionalInfo3: System.Collections.IComparer
     AdditionalInfo4: System.Collections.IHashCodeProvider
     AdditionalInfo5: Int32 (0x08)
     SerializedMemberValues:
         MemberValue1:
             MemberPrimitiveUnTyped:
                 Value: 0.72
         MemberValue2:
             MemberPrimitiveUnTyped:
                 Value: 0
         MemberValue3:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
         MemberValue4:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
         MemberValue5:
             MemberPrimitiveUnTyped:
                 Value: 11
         MemberValue6:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 13
         MemberValue7:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 14
 StringCollection:
     RecordTypeEnum: ClassWithMembersAndTypes (0x05)
     ObjectId: 9
     ClassName: System.Collections.Specialized.StringCollection
     MemberCount: 1
     MemberName1: data
     BinaryTypeEnum1: SystemClass (0x03)
     AdditionalInfo1: System.Collections.ArrayList
     LibraryId: 6
     SerializedMemberValues:
         MemberValue1:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 15
 DictionaryNode:
     RecordTypeEnum: ClassWithMembersAndTypes (0x05)
     ObjectId: 12
     ClassName: System.Collections.Specialized.ListDictionary+DictionaryNode
     MemberCount: 3
     MemberName1: key
     MemberName2: value
     MemberName3: next
     BinaryTypeEnum1: Object (0x02)
     BinaryTypeEnum2: Object (0x03)
     BinaryTypeEnum3: Class (0x04)
     AdditionalInfo3TypeName: System.Collections.Specialized.ListDictionary+DictionaryNode
     AdditionalInfo3LibraryId: 6
     LibraryId: 6
     SerializedMemberValues:
         MemberValue1:
             BinaryObjectString:
                 RecordTypeEnum: BinaryObjectString (0x06)
                 ObjectId: 16
                 Value: id=s-1-5-21-878380243-1958209386-896679168-1340
         MemberValue2:
             MemberPrimitiveTyped:
                 RecordTypeEnum: MemberPrimitiveTyped (0x08)
                 PrimitiveTypeEnum: Boolean (0x01)
                 Value: True (0x01)
         MemberValue3:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 17
 ArraySingleObject:
     RecordTypeEnum: ArraySingleObject (0x10)
     ObjectId: 13
     Length: 0
 ArraySingleObject:
     RecordTypeEnum: ArraySingleObject (0x10)
     ObjectId: 14
     Length: 0
 ArrayList:
     RecordTypeEnum: SystemClassWithMembersAndTypes (0x04)
     ObjectId: 15
     ClassName: System.Collections.ArrayList
     MemberCount: 3
     MemberName1: _items
     MemberName2: _size
     MemberName3: _version
     BinaryTypeEnum1: ObjectArray (0x05)
     BinaryTypeEnum2: Primitive (0x00)
     BinaryTypeEnum3: Primitive (0x00)
     AdditionalInfo2: Int32 (0x08)
     AdditionalInfo3: Int32 (0x08)
     SerializedMemberValues:
         MemberValue1:
             MemberReference:
                 RecordTypeEnum: MemberReference (0x09)
                 IdRef: 18
         MemberValue2:
             MemberPrimitiveUnTyped:
                 Value: 2
         MemberValue3:
             MemberPrimitiveUnTyped:
                 Value: 2
 ClassWithId:
     RecordTypeEnum: ClassWithId (0x01)
     ObjectId: 17
     MetadataId: 12
     SerializedMemberValues:
         MemberValue1:
             BinaryObjectString:
                 RecordTypeEnum: BinaryObjectString (0x06)
                 ObjectId: 19
                 Value: mail=user1@contoso.com
         MemberValue2:
             MemberPrimitiveTyped:
                 RecordTypeEnum: MemberPrimitiveTyped (0x08)
                 PrimitiveTypeEnum: Boolean (0x01)
                 Value: True (0x01)
         MemberValue3:
             ObjectNull:
                 RecordTypeEnum: ObjectNull (0x0A)
 ArraySingleObject:
     RecordTypeEnum: ArraySingleObject (0x10)
     ObjectId: 18
     Length: 16
     Values:
         BinaryObjectString:
             RecordTypeEnum: BinaryObjectString (0x06)
             ObjectId: 20
             Value: 5b98d9f16720f3489899d8893795f3ae
         BinaryObjectString:
             RecordTypeEnum: BinaryObjectString (0x06)
             ObjectId: 21
             Value: f2a0f0483745cb4ca23a4adcbd62f215
         ObjectNullMultiple256:
             RecordTypeEnum: ObjectNullMultiple256 (0x0D)
             NullCount: 14
 MessageEnd:
     RecordTypeEnum: MessageEnd (0x0B)
  

The client examines the MessageEnum flag in the IsPrincipalMemberOfResponse record to determine whether the request was successful. Because ReturnValueInline is set and ExceptionInArray is not set, the request was successful. The client examines the ReturnValue field of the IsPrincipalMemberOfResponse record to determine that the value "True" (0x01) was returned. The client deserializes the remainder of the message, ensuring its validity, but does not take any additional action based on the content. In particular, the client does not attempt to interpret the content of any strings that were serialized as class member values.