@@ -114,22 +114,90 @@ static void ReportComputer(DataSet ds, TextWriter s) // outputs computer and do
114114 s . WriteLine ( $ "Forest Domain: { Domain . GetString ( "ForestName" ) } ") ;
115115 s . WriteLine ( $ "Forest Mode: { Domain . GetString ( "ForestMode" ) } ") ;
116116 s . WriteLine ( ) ;
117+
118+ // domains trusted by this domain
117119 if ( ds . Tables [ "RelatedDomain" ] . Rows . Count == 0 )
118120 {
119121 s . WriteLine ( "There do not appear to be any other domains in this organization." ) ;
120122 }
121123 else
122124 {
125+ s . WriteLine ( $ "Domains trusted by { Domain . GetString ( "DomainName" ) } .") ;
126+ s . WriteLine ( ) ;
123127 DataTable dtRelatedDomain = ds . Tables [ "RelatedDomain" ] ;
124128 ReportFormatter rf = new ReportFormatter ( ) ;
125- rf . SetColumnNames ( "Source Domain:L" , "TargetDomain :L", "Trust Type :L", "Direction :L" , "Selective Auth :L" ) ;
129+ rf . SetColumnNames ( "Target Domain:L" , "Trust Type:L" , "Direction :L", "Selective Auth :L", "Encryption :L" , "Attributes:L" , "Message :L") ;
126130 foreach ( DataRow RelatedDomain in dtRelatedDomain . Rows )
127131 {
128- rf . SetcolumnData ( RelatedDomain . GetString ( "SourceDomain" ) ,
129- RelatedDomain . GetString ( "TargetDomain" ) ,
132+ rf . SetcolumnData ( RelatedDomain . GetString ( "TargetDomain" ) ,
130133 RelatedDomain . GetString ( "TrustType" ) ,
131134 RelatedDomain . GetString ( "TrustDirection" ) ,
132- RelatedDomain . GetBoolean ( "SelectiveAuthentication" ) . ToString ( ) ) ;
135+ RelatedDomain . GetBoolean ( "SelectiveAuthentication" ) . ToString ( ) ,
136+ RelatedDomain . GetString ( "SupportedEncryptionTypes" ) ,
137+ RelatedDomain . GetString ( "TrustAttributes" ) ,
138+ RelatedDomain . GetString ( "Message" ) ) ;
139+ }
140+ s . WriteLine ( rf . GetHeaderText ( ) ) ;
141+ s . WriteLine ( rf . GetSeparatorText ( ) ) ;
142+ for ( int i = 0 ; i < rf . GetRowCount ( ) ; i ++ )
143+ {
144+ s . WriteLine ( rf . GetDataText ( i ) ) ;
145+ }
146+ }
147+ s . WriteLine ( ) ;
148+
149+ // domains trusted by the root domain
150+ if ( ds . Tables [ "RootDomainRelatedDomain" ] . Rows . Count == 0 )
151+ {
152+ s . WriteLine ( $ "There do not appear to be any domains trusted by root domain { Domain . GetString ( "RootDomain" ) } .") ;
153+ }
154+ else
155+ {
156+ s . WriteLine ( $ "Domains trusted by root domain { Domain . GetString ( "RootDomain" ) } .") ;
157+ s . WriteLine ( ) ;
158+ DataTable dtRelatedDomain = ds . Tables [ "RootDomainRelatedDomain" ] ;
159+ ReportFormatter rf = new ReportFormatter ( ) ;
160+ rf . SetColumnNames ( "Target Domain:L" , "Trust Type:L" , "Direction:L" , "Selective Auth:L" , "Encryption:L" , "Attributes:L" , "Message:L" ) ;
161+ foreach ( DataRow RelatedDomain in dtRelatedDomain . Rows )
162+ {
163+ rf . SetcolumnData ( RelatedDomain . GetString ( "TargetDomain" ) ,
164+ RelatedDomain . GetString ( "TrustType" ) ,
165+ RelatedDomain . GetString ( "TrustDirection" ) ,
166+ RelatedDomain . GetBoolean ( "SelectiveAuthentication" ) . ToString ( ) ,
167+ RelatedDomain . GetString ( "SupportedEncryptionTypes" ) ,
168+ RelatedDomain . GetString ( "TrustAttributes" ) ,
169+ RelatedDomain . GetString ( "Message" ) ) ;
170+ }
171+ s . WriteLine ( rf . GetHeaderText ( ) ) ;
172+ s . WriteLine ( rf . GetSeparatorText ( ) ) ;
173+ for ( int i = 0 ; i < rf . GetRowCount ( ) ; i ++ )
174+ {
175+ s . WriteLine ( rf . GetDataText ( i ) ) ;
176+ }
177+ }
178+ s . WriteLine ( ) ;
179+
180+ // domains trusted by the forest
181+ if ( ds . Tables [ "ForestRelatedDomain" ] . Rows . Count == 0 )
182+ {
183+ s . WriteLine ( $ "There do not appear to be any domains trusted by forest { Domain . GetString ( "ForestName" ) } .") ;
184+ }
185+ else
186+ {
187+ s . WriteLine ( $ "Forests trusted by root domain { Domain . GetString ( "ForestName" ) } .") ;
188+ s . WriteLine ( ) ;
189+ DataTable dtRelatedDomain = ds . Tables [ "ForestRelatedDomain" ] ;
190+ ReportFormatter rf = new ReportFormatter ( ) ;
191+ rf . SetColumnNames ( "Target Forest:L" , "Trust Type:L" , "Direction:L" , "Selective Auth:L" , "Encryption:L" , "Attributes:L" , "Message:L" ) ;
192+ foreach ( DataRow RelatedDomain in dtRelatedDomain . Rows )
193+ {
194+ rf . SetcolumnData ( RelatedDomain . GetString ( "TargetDomain" ) ,
195+ RelatedDomain . GetString ( "TrustType" ) ,
196+ RelatedDomain . GetString ( "TrustDirection" ) ,
197+ RelatedDomain . GetBoolean ( "SelectiveAuthentication" ) . ToString ( ) ,
198+ RelatedDomain . GetString ( "SupportedEncryptionTypes" ) ,
199+ RelatedDomain . GetString ( "TrustAttributes" ) ,
200+ RelatedDomain . GetString ( "Message" ) ) ;
133201 }
134202 s . WriteLine ( rf . GetHeaderText ( ) ) ;
135203 s . WriteLine ( rf . GetSeparatorText ( ) ) ;
@@ -194,6 +262,7 @@ static void ReportNetwork(DataSet ds, TextWriter s) // outputs network settings
194262 DataTable dtNetworkAdapter = ds . Tables [ "NetworkAdapter" ] ;
195263 DataTable dtHostAlias = ds . Tables [ "HostAlias" ] ;
196264 DataTable dtIPAddress = ds . Tables [ "IPAddress" ] ;
265+ DataTable dtFLTMC = ds . Tables [ "FLTMC" ] ;
197266
198267 s . WriteLine ( "Network Settings:" ) ;
199268 s . WriteLine ( ) ;
@@ -245,6 +314,45 @@ static void ReportNetwork(DataSet ds, TextWriter s) // outputs network settings
245314 for ( int i = 0 ; i < rf . GetRowCount ( ) ; i ++ ) s . WriteLine ( rf . GetDataText ( i ) ) ;
246315 s . WriteLine ( ) ;
247316
317+ // FLTMC Filters
318+
319+ string filterNames = "" ;
320+ foreach ( DataRow FLTMC in dtFLTMC . Rows )
321+ {
322+ filterNames += "|" + FLTMC . GetString ( "Name" ) ;
323+ }
324+ filterNames = filterNames == "" ? "<none>" : filterNames . Substring ( 1 ) ;
325+ s . WriteLine ( $ "FLTMC Filters: { filterNames } ") ;
326+ s . WriteLine ( ) ;
327+
328+ // network mini drivers
329+
330+ DataTable dtNetworkMiniDriver = ds . Tables [ "NetworkMiniDriver" ] ;
331+ if ( dtNetworkMiniDriver . Rows . Count == 0 )
332+ {
333+ s . WriteLine ( "Network Mini-Drivers: none found" ) ;
334+ s . WriteLine ( ) ;
335+ }
336+ else
337+ {
338+ s . WriteLine ( "Network Mini-Drivers:" ) ;
339+ s . WriteLine ( ) ;
340+
341+ rf = new ReportFormatter ( ) ;
342+ rf . SetColumnNames ( "Service Name:L" , "Filter Media Types:L" , "Help Text:L" ) ;
343+ foreach ( DataRow NetworkMiniDriver in dtNetworkMiniDriver . Rows )
344+ {
345+ rf . SetcolumnData ( NetworkMiniDriver . GetString ( "Service" ) ,
346+ NetworkMiniDriver . GetString ( "FilterMediaTypes" ) ,
347+ NetworkMiniDriver . GetString ( "HelpText" ) ) ;
348+ }
349+ s . WriteLine ( rf . GetHeaderText ( ) ) ;
350+ s . WriteLine ( rf . GetSeparatorText ( ) ) ;
351+ for ( int i = 0 ; i < rf . GetRowCount ( ) ; i ++ ) s . WriteLine ( rf . GetDataText ( i ) ) ;
352+ s . WriteLine ( ) ;
353+ }
354+
355+
248356 // network adapters
249357
250358 s . WriteLine ( "Network Adapters:" ) ;
@@ -272,6 +380,7 @@ static void ReportSecurity(DataSet ds, TextWriter s) // outputs computer and do
272380 s . WriteLine ( "Security Settings:" ) ;
273381 s . WriteLine ( ) ;
274382 s . WriteLine ( $ "Crash on Audit Fail: { Security . GetString ( "CrashOnAuditFail" ) } ") ;
383+ s . WriteLine ( $ "Lanman Compatibility Level: { Security . GetString ( "lanmanCompatibilityLevel" ) } ") ;
275384 s . WriteLine ( $ "Disable Loopback Check: { Security . GetString ( "DisableLoopbackCheck" ) } ") ;
276385 s . WriteLine ( $ "Back Connection Host Names: { Security . GetString ( "BackConnectionHostNames" ) } ") ;
277386 s . WriteLine ( $ "Max Kerberos Token Size: { Security . GetString ( "MaxTokenSize" ) } ") ;
@@ -787,7 +896,10 @@ static void ReportMessages(DataSet ds, TextWriter s, string tableName, int table
787896 }
788897 break ;
789898 case Storage . SeverityLevel . Exception :
899+ string src = drv [ "exSource" ] . ToString ( ) ;
900+ if ( src != "" ) src = "Source: " + src ;
790901 s . WriteLine ( $ "{ sev . ToString ( ) } : { drv [ "Message" ] . ToString ( ) } ") ;
902+ s . WriteLine ( $ "Exception Type: { drv [ "ExceptionTypeName" ] . ToString ( ) } { src } ") ;
791903 s . WriteLine ( $ "{ drv [ "exMessage" ] . ToString ( ) } ") ;
792904 s . WriteLine ( $ "{ drv [ "exStackTrace" ] . ToString ( ) } ") ;
793905 messagesOutput = true ;
0 commit comments