mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 18:56:48 +00:00
implement hex value support for ParseAccessMaskString
sync ComputeStringSidSize with wine svn path=/trunk/; revision=37971
This commit is contained in:
parent
69096be449
commit
f39793d4ca
1 changed files with 34 additions and 12 deletions
|
@ -452,10 +452,35 @@ ParseAccessMaskString(
|
||||||
OUT DWORD* pAccessMask,
|
OUT DWORD* pAccessMask,
|
||||||
OUT SIZE_T* pLength)
|
OUT SIZE_T* pLength)
|
||||||
{
|
{
|
||||||
/* FIXME: Allow hexadecimal string for access rights! */
|
LPCWSTR szAcl = Buffer;
|
||||||
|
BOOL RetVal = FALSE;
|
||||||
|
LPCWSTR ptr;
|
||||||
|
|
||||||
return ParseFlagsString(Buffer, AccessMaskTable, SDDL_SEPERATORC, pAccessMask, pLength);
|
if ((*szAcl == '0') && (*(szAcl + 1) == 'x'))
|
||||||
}
|
{
|
||||||
|
LPCWSTR p = szAcl;
|
||||||
|
|
||||||
|
while (*p && *p != ';')
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if (p - szAcl <= 10 /* 8 hex digits + "0x" */ )
|
||||||
|
{
|
||||||
|
*pAccessMask = strtoulW(szAcl, NULL, 16);
|
||||||
|
ptr = wcschr(Buffer, SDDL_SEPERATORC);
|
||||||
|
if (ptr)
|
||||||
|
{
|
||||||
|
*pLength = ptr - Buffer;
|
||||||
|
RetVal = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RetVal = ParseFlagsString(Buffer, AccessMaskTable, SDDL_SEPERATORC, pAccessMask, pLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RetVal;
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
ParseGuidString(
|
ParseGuidString(
|
||||||
|
@ -1664,12 +1689,9 @@ ConvertStringSidToSidA(IN LPCSTR StringSid,
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* ComputeStringSidSize
|
* ComputeStringSidSize
|
||||||
*/
|
*/
|
||||||
static DWORD
|
static DWORD ComputeStringSidSize(LPCWSTR StringSid)
|
||||||
ComputeStringSidSize(LPCWSTR StringSid)
|
|
||||||
{
|
{
|
||||||
DWORD size = sizeof(SID);
|
if (StringSid[0] == 'S' && StringSid[1] == '-') /* S-R-I(-S)+ */
|
||||||
|
|
||||||
if (StringSid[0] == 'S' && StringSid[1] == '-') /* S-R-I-S-S */
|
|
||||||
{
|
{
|
||||||
int ctok = 0;
|
int ctok = 0;
|
||||||
while (*StringSid)
|
while (*StringSid)
|
||||||
|
@ -1679,8 +1701,8 @@ ComputeStringSidSize(LPCWSTR StringSid)
|
||||||
StringSid++;
|
StringSid++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctok > 3)
|
if (ctok >= 3)
|
||||||
size += (ctok - 3) * sizeof(DWORD);
|
return GetSidLengthRequired(ctok - 2);
|
||||||
}
|
}
|
||||||
else /* String constant format - Only available in winxp and above */
|
else /* String constant format - Only available in winxp and above */
|
||||||
{
|
{
|
||||||
|
@ -1688,10 +1710,10 @@ ComputeStringSidSize(LPCWSTR StringSid)
|
||||||
|
|
||||||
for (i = 0; i < sizeof(WellKnownSids)/sizeof(WellKnownSids[0]); i++)
|
for (i = 0; i < sizeof(WellKnownSids)/sizeof(WellKnownSids[0]); i++)
|
||||||
if (!strncmpW(WellKnownSids[i].wstr, StringSid, 2))
|
if (!strncmpW(WellKnownSids[i].wstr, StringSid, 2))
|
||||||
size += (WellKnownSids[i].Sid.SubAuthorityCount - 1) * sizeof(DWORD);
|
return GetSidLengthRequired(WellKnownSids[i].Sid.SubAuthorityCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
return size;
|
return GetSidLengthRequired(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const RECORD SidTable[] =
|
static const RECORD SidTable[] =
|
||||||
|
|
Loading…
Reference in a new issue