@@ -596,6 +596,55 @@ get_description(EVT_HANDLE handle, LANGID langID, EVT_HANDLE hRemote)
596
596
return _wcsdup (result.data ());
597
597
}
598
598
599
+ static int ExpandSIDWString (PSID sid, CHAR **out_expanded)
600
+ {
601
+ #define MAX_NAME 256
602
+ DWORD len = MAX_NAME, err = ERROR_SUCCESS;
603
+ SID_NAME_USE sid_type = SidTypeUnknown;
604
+ char account[MAX_NAME];
605
+ char domain[MAX_NAME];
606
+ DWORD result_len = 0 ;
607
+ CHAR *formatted = NULL ;
608
+ VALUE vformatted;
609
+
610
+ if (!LookupAccountSidA (NULL , sid,
611
+ account, &len, domain,
612
+ &len, &sid_type)) {
613
+ err = GetLastError ();
614
+ if (err == ERROR_NONE_MAPPED) {
615
+ goto not_mapped_error;
616
+ }
617
+ else {
618
+ return -2 ;
619
+ }
620
+
621
+ goto error;
622
+ }
623
+
624
+ result_len = strlen (domain) + 1 + strlen (account) + 1 ;
625
+ formatted = (CHAR *)ALLOCV (vformatted, result_len);
626
+ if (formatted == NULL ) {
627
+ goto error;
628
+ }
629
+
630
+ _snprintf_s (formatted, result_len, _TRUNCATE, " %s\\ %s" , domain, account);
631
+
632
+ *out_expanded = strdup (formatted);
633
+
634
+ ALLOCV_END (vformatted);
635
+
636
+ return 0 ;
637
+
638
+ not_mapped_error:
639
+
640
+ return -1 ;
641
+
642
+ error:
643
+ err = GetLastError ();
644
+ ALLOCV_END (vformatted);
645
+ raise_system_error (rb_eRuntimeError, err);
646
+ }
647
+
599
648
VALUE
600
649
render_system_event (EVT_HANDLE hEvent, BOOL preserve_qualifiers)
601
650
{
@@ -787,7 +836,13 @@ render_system_event(EVT_HANDLE hEvent, BOOL preserve_qualifiers)
787
836
788
837
if (EvtVarTypeNull != pRenderedValues[EvtSystemUserID].Type ) {
789
838
if (ConvertSidToStringSid (pRenderedValues[EvtSystemUserID].SidVal , &pwsSid)) {
790
- rbstr = rb_utf8_str_new_cstr (pwsSid);
839
+ CHAR *expandSID;
840
+ if (ExpandSIDWString (pRenderedValues[EvtSystemUserID].SidVal ,
841
+ &expandSID) == 0 ) {
842
+ rbstr = rb_utf8_str_new_cstr (expandSID);
843
+ } else {
844
+ rbstr = rb_utf8_str_new_cstr (pwsSid);
845
+ }
791
846
rb_hash_aset (hash, rb_str_new2 (" UserID" ), rbstr);
792
847
LocalFree (pwsSid);
793
848
}
0 commit comments