X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=programs%2Fimagex-win32.c;h=c5c40d5f6f65bf34b0bc6023dcd472dcc5b57ee4;hb=c07877105822d01725b36b011c93609559164b06;hp=083c1453a9dc1d034721770e55ca28c7b8b38586;hpb=da295f258b60e1593de305385c0669eac4b76644;p=wimlib diff --git a/programs/imagex-win32.c b/programs/imagex-win32.c index 083c1453..c5c40d5f 100644 --- a/programs/imagex-win32.c +++ b/programs/imagex-win32.c @@ -56,30 +56,46 @@ L" Maybe try converting your text file to UTF-16LE?\n" return NULL; } -static inline bool -is_path_separator(wchar_t c) +/* Set a file descriptor to binary mode. */ +void set_fd_to_binary_mode(int fd) { - return c == L'/' || c == L'\\'; + _setmode(fd, _O_BINARY); } -/* basename() (modifying, trailing-slash stripping version) for wide-character - * strings. Understands both forward and backward slashes. */ -wchar_t * -win32_wbasename(wchar_t *path) -{ - wchar_t *p = wcschr(path, L'\0'); +#include - p--; - while (p >= path && is_path_separator(*p)) - *p-- = '\0'; - while (p >= path && !is_path_separator(*p)) - p--; - p++; - return p; +static wchar_t * +get_security_descriptor_string(PSECURITY_DESCRIPTOR desc) +{ + wchar_t *str = NULL; + /* 53 characters!!! */ + ConvertSecurityDescriptorToStringSecurityDescriptorW( + desc, + SDDL_REVISION_1, + OWNER_SECURITY_INFORMATION | + GROUP_SECURITY_INFORMATION | + DACL_SECURITY_INFORMATION | + SACL_SECURITY_INFORMATION, + &str, + NULL); + return str; } -/* Set a file descriptor to binary mode. */ -void set_fd_to_binary_mode(int fd) +void +win32_print_security_descriptor(const uint8_t *sd, size_t size) { - _setmode(fd, _O_BINARY); + wchar_t *str; + const wchar_t *printstr; + + /* 'size' is ignored here due to the crappy Windows APIs. Oh well, this + * is just for debugging anyway. */ + str = get_security_descriptor_string((PSECURITY_DESCRIPTOR)sd); + if (str) + printstr = str; + else + printstr = L"(invalid)"; + + wprintf(L"Security Descriptor = %ls\n", printstr); + + LocalFree(str); }