@@ -137,60 +137,85 @@ public void testIsValidSid() {
137
137
String sidString = EVERYONE ;
138
138
PSIDByReference sid = new PSIDByReference ();
139
139
assertTrue ("SID conversion failed" , Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
140
- assertTrue ("Converted SID not valid: " + sid .getValue (), Advapi32 .INSTANCE .IsValidSid (sid .getValue ()));
141
- int sidLength = Advapi32 .INSTANCE .GetLengthSid (sid .getValue ());
142
- assertTrue (sidLength > 0 );
143
- assertTrue (Advapi32 .INSTANCE .IsValidSid (sid .getValue ()));
140
+
141
+ PSID value = sid .getValue ();
142
+ try {
143
+ assertTrue ("Converted SID not valid: " + value , Advapi32 .INSTANCE .IsValidSid (value ));
144
+ int sidLength = Advapi32 .INSTANCE .GetLengthSid (value );
145
+ assertTrue ("Non positive sid length" , sidLength > 0 );
146
+ assertTrue ("Invalid sid" , Advapi32 .INSTANCE .IsValidSid (value ));
147
+ } finally {
148
+ assertNull ("Failed to release SID" , Kernel32 .INSTANCE .LocalFree (value .getPointer ()));
149
+ }
144
150
}
145
151
146
152
public void testGetSidLength () {
147
153
String sidString = EVERYONE ;
148
154
PSIDByReference sid = new PSIDByReference ();
149
155
assertTrue ("SID conversion failed" , Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
150
- assertEquals ("Wrong SID lenght" , 12 , Advapi32 .INSTANCE .GetLengthSid (sid .getValue ()));
156
+
157
+ PSID value = sid .getValue ();
158
+ try {
159
+ assertEquals ("Wrong SID length" , 12 , Advapi32 .INSTANCE .GetLengthSid (value ));
160
+ } finally {
161
+ assertNull ("Failed to free SID" , Kernel32 .INSTANCE .LocalFree (value .getPointer ()));
162
+ }
151
163
}
152
164
153
165
public void testLookupAccountSid () {
154
166
// get SID bytes
155
167
String sidString = EVERYONE ;
156
168
PSIDByReference sid = new PSIDByReference ();
157
- assertTrue (Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
158
- int sidLength = Advapi32 .INSTANCE .GetLengthSid (sid .getValue ());
159
- assertTrue (sidLength > 0 );
160
- // lookup account
161
- IntByReference cchName = new IntByReference ();
162
- IntByReference cchReferencedDomainName = new IntByReference ();
163
- PointerByReference peUse = new PointerByReference ();
164
- assertFalse (Advapi32 .INSTANCE .LookupAccountSid (null , sid .getValue (),
165
- null , cchName , null , cchReferencedDomainName , peUse ));
166
- assertEquals (W32Errors .ERROR_INSUFFICIENT_BUFFER , Kernel32 .INSTANCE .GetLastError ());
167
- assertTrue (cchName .getValue () > 0 );
168
- assertTrue (cchReferencedDomainName .getValue () > 0 );
169
- char [] referencedDomainName = new char [cchReferencedDomainName .getValue ()];
170
- char [] name = new char [cchName .getValue ()];
171
- assertTrue (Advapi32 .INSTANCE .LookupAccountSid (null , sid .getValue (),
172
- name , cchName , referencedDomainName , cchReferencedDomainName , peUse ));
173
- assertEquals (5 , peUse .getPointer ().getInt (0 )); // SidTypeWellKnownGroup
174
- String nameString = Native .toString (name );
175
- String referencedDomainNameString = Native .toString (referencedDomainName );
176
- assertTrue (nameString .length () > 0 );
177
- assertEquals ("Everyone" , nameString );
178
- assertTrue (referencedDomainNameString .length () == 0 );
179
- assertEquals (null , Kernel32 .INSTANCE .LocalFree (sid .getValue ().getPointer ()));
169
+ assertTrue ("Failed to create sid" , Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
170
+
171
+ PSID value = sid .getValue ();
172
+ try {
173
+ int sidLength = Advapi32 .INSTANCE .GetLengthSid (value );
174
+ assertTrue ("Non-positive sid length" , sidLength > 0 );
175
+ // lookup account
176
+ IntByReference cchName = new IntByReference ();
177
+ IntByReference cchReferencedDomainName = new IntByReference ();
178
+ PointerByReference peUse = new PointerByReference ();
179
+ assertFalse (Advapi32 .INSTANCE .LookupAccountSid (null , value ,
180
+ null , cchName , null , cchReferencedDomainName , peUse ));
181
+ assertEquals (W32Errors .ERROR_INSUFFICIENT_BUFFER , Kernel32 .INSTANCE .GetLastError ());
182
+ assertTrue (cchName .getValue () > 0 );
183
+ assertTrue (cchReferencedDomainName .getValue () > 0 );
184
+ char [] referencedDomainName = new char [cchReferencedDomainName .getValue ()];
185
+ char [] name = new char [cchName .getValue ()];
186
+ assertTrue (Advapi32 .INSTANCE .LookupAccountSid (null , value ,
187
+ name , cchName , referencedDomainName , cchReferencedDomainName , peUse ));
188
+ assertEquals (5 , peUse .getPointer ().getInt (0 )); // SidTypeWellKnownGroup
189
+ String nameString = Native .toString (name );
190
+ String referencedDomainNameString = Native .toString (referencedDomainName );
191
+ assertTrue (nameString .length () > 0 );
192
+ assertEquals ("Everyone" , nameString );
193
+ assertTrue (referencedDomainNameString .length () == 0 );
194
+ } finally {
195
+ assertNull ("Failed to release sid" , Kernel32 .INSTANCE .LocalFree (value .getPointer ()));
196
+ }
180
197
}
181
198
182
199
public void testConvertSid () {
183
200
String sidString = EVERYONE ;
184
201
PSIDByReference sid = new PSIDByReference ();
185
- assertTrue (Advapi32 .INSTANCE .ConvertStringSidToSid (
186
- sidString , sid ));
187
- PointerByReference convertedSidStringPtr = new PointerByReference ();
188
- assertTrue (Advapi32 .INSTANCE .ConvertSidToStringSid (
189
- sid .getValue (), convertedSidStringPtr ));
190
- String convertedSidString = convertedSidStringPtr .getValue ().getWideString (0 );
191
- assertEquals (convertedSidString , sidString );
192
- assertEquals (null , Kernel32 .INSTANCE .LocalFree (convertedSidStringPtr .getValue ()));
193
- assertEquals (null , Kernel32 .INSTANCE .LocalFree (sid .getValue ().getPointer ()));
202
+ assertTrue ("Failed to convert SID string" , Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
203
+
204
+ PSID value = sid .getValue ();
205
+ try {
206
+ PointerByReference convertedSidStringPtr = new PointerByReference ();
207
+ assertTrue ("Failed to convert SID string" , Advapi32 .INSTANCE .ConvertSidToStringSid (value , convertedSidStringPtr ));
208
+
209
+ Pointer conv = convertedSidStringPtr .getValue ();
210
+ try {
211
+ String convertedSidString = conv .getWideString (0 );
212
+ assertEquals ("Mismatched SID string" , convertedSidString , sidString );
213
+ } finally {
214
+ assertNull ("Failed to release string value" , Kernel32 .INSTANCE .LocalFree (conv ));
215
+ }
216
+ } finally {
217
+ assertNull ("Failed to release sid" , Kernel32 .INSTANCE .LocalFree (value .getPointer ()));
218
+ }
194
219
}
195
220
196
221
public void testLogonUser () {
@@ -594,26 +619,35 @@ public void testRegQueryInfoKey() {
594
619
public void testIsWellKnownSid () {
595
620
String sidString = EVERYONE ;
596
621
PSIDByReference sid = new PSIDByReference ();
597
- assertTrue (Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
598
- assertTrue (Advapi32 .INSTANCE .IsWellKnownSid (sid .getValue (),
599
- WELL_KNOWN_SID_TYPE .WinWorldSid ));
600
- assertFalse (Advapi32 .INSTANCE .IsWellKnownSid (sid .getValue (),
601
- WELL_KNOWN_SID_TYPE .WinAccountAdministratorSid ));
622
+ assertTrue ("sid conversion failed" , Advapi32 .INSTANCE .ConvertStringSidToSid (sidString , sid ));
623
+
624
+ PSID value = sid .getValue ();
625
+ try {
626
+ assertTrue ("Not a world sid" , Advapi32 .INSTANCE .IsWellKnownSid (value , WELL_KNOWN_SID_TYPE .WinWorldSid ));
627
+ assertFalse ("Unexpected admin sid" , Advapi32 .INSTANCE .IsWellKnownSid (value , WELL_KNOWN_SID_TYPE .WinAccountAdministratorSid ));
628
+ } finally {
629
+ assertNull ("Failed to release sid" , Kernel32 .INSTANCE .LocalFree (value .getPointer ()));
630
+ }
602
631
}
603
632
604
633
public void testCreateWellKnownSid () {
605
634
PSID pSid = new PSID (WinNT .SECURITY_MAX_SID_SIZE );
606
635
IntByReference cbSid = new IntByReference (WinNT .SECURITY_MAX_SID_SIZE );
607
- assertTrue (Advapi32 . INSTANCE . CreateWellKnownSid ( WELL_KNOWN_SID_TYPE . WinWorldSid ,
608
- null , pSid , cbSid ));
609
- assertTrue (Advapi32 . INSTANCE . IsWellKnownSid ( pSid ,
610
- WELL_KNOWN_SID_TYPE .WinWorldSid ));
611
- assertTrue (cbSid .getValue () <= WinNT .SECURITY_MAX_SID_SIZE );
636
+ assertTrue ("Failed to create well-known SID" ,
637
+ Advapi32 . INSTANCE . CreateWellKnownSid ( WELL_KNOWN_SID_TYPE . WinWorldSid , null , pSid , cbSid ));
638
+ assertTrue ("Not recognized as well-known SID" ,
639
+ Advapi32 . INSTANCE . IsWellKnownSid ( pSid , WELL_KNOWN_SID_TYPE .WinWorldSid ));
640
+ assertTrue ("Invalid SID size" , cbSid .getValue () <= WinNT .SECURITY_MAX_SID_SIZE );
612
641
PointerByReference convertedSidStringPtr = new PointerByReference ();
613
- assertTrue (Advapi32 .INSTANCE .ConvertSidToStringSid (
614
- pSid , convertedSidStringPtr ));
615
- String convertedSidString = convertedSidStringPtr .getValue ().getWideString (0 );
616
- assertEquals (EVERYONE , convertedSidString );
642
+ assertTrue ("Failed to convert SID" , Advapi32 .INSTANCE .ConvertSidToStringSid (pSid , convertedSidStringPtr ));
643
+
644
+ Pointer conv = convertedSidStringPtr .getValue ();
645
+ try {
646
+ String convertedSidString = conv .getWideString (0 );
647
+ assertEquals ("Mismatched SID string" , EVERYONE , convertedSidString );
648
+ } finally {
649
+ assertNull ("Failed to release string" , Kernel32 .INSTANCE .LocalFree (conv ));
650
+ }
617
651
}
618
652
619
653
public void testOpenEventLog () {
0 commit comments