RtlStringCchCopyNExW
NTSTATUS __stdcall RtlStringCchCopyNExW(
WCHAR *pszDest,
UINT64 cchDest,
WCHAR *pszSrc,
UINT64 cchToCopy,
WCHAR **ppszDestEnd,
UINT64 *pcchRemaining,
UINT64 dwFlags){
NTSTATUS v9;
WCHAR *v10;
UINT64 v11;
NTSTATUS v12;
UINT64 v13;
UINT64 v15;
size_t pcchNewDestLength[2];
v9 = 0;
if( (dwFlags & 0x100) != 0 )
{
if( !pszDest && cchDest || cchDest > 0x7FFFFFFF )
v9 = -1073741811;
}
else if( cchDest - 1 > 0x7FFFFFFE )
{
v9 = -1073741811;
}
if( v9 < 0 )
{
if( cchDest )
*pszDest = 0;
return v9;
}
v15 = (UINT64)pszDest;
v10 = pszDest;
*(_QWORD *)pcchNewDestLength = cchDest;
v11 = cchDest;
if( cchToCopy >= 0x7FFFFFFF )
{
v9 = -1073741811;
if( cchDest )
*pszDest = 0;
LABEL_11:
if( v9 >= 0 )
{
LABEL_12:
if( ppszDestEnd )
*ppszDestEnd = v10;
if( pcchRemaining )
*pcchRemaining = v11;
return v9;
}
goto LABEL_28;
}
if( (dwFlags & 0x100) != 0 && !pszSrc )
{
pszSrc = (WCHAR *)&::ppszDestEnd;
cchToCopy = 0i64;
}
v9 = 0;
if( (dwFlags & 0xFFFFE000) != 0 )
{
v9 = -1073741811;
if( cchDest )
*pszDest = 0;
}
else if( cchDest )
{
*(_QWORD *)pcchNewDestLength = 0i64;
v12 = RtlStringCopyWorkerW_1(pszDest, cchDest, pcchNewDestLength, pszSrc, cchToCopy);
v13 = *(_QWORD *)pcchNewDestLength;
v9 = v12;
v11 = cchDest - *(_QWORD *)pcchNewDestLength;
*(_QWORD *)pcchNewDestLength = cchDest - *(_QWORD *)pcchNewDestLength;
v10 = &pszDest[v13];
v15 = (UINT64)v10;
if( v12 >= 0 )
{
if( (dwFlags & 0x200) != 0 && v11 > 1 )
{
pszSrc = (WCHAR *)(2 * v11);
if( 2 * v11 > 2 )
memset(v10 + 1, (unsigned __int8)dwFlags, (_DWORD)pszSrc - 2);
}
goto LABEL_11;
}
}
else
{
if( !cchToCopy || !*pszSrc )
goto LABEL_12;
v9 = pszDest != 0i64 ? -2147483643 : -1073741811;
}
LABEL_28:
if( (dwFlags & 0x1C00) != 0 && cchDest )
{
StringExHandleOtherFlagsW(pszDest, 2 * cchDest, (WCHAR **)pszSrc, &v15, (UINT64)pcchNewDestLength);
v10 = (WCHAR *)v15;
v11 = *(_QWORD *)pcchNewDestLength;
}
if( (int)(v9 + 0x80000000) < 0 || v9 == -2147483643 )
goto LABEL_12;
return v9;
}Referenced by:
CmGetDeviceInterfaceSubkeyPath
CmGetDeviceInterfaceSymbolicLinkName
CmSplitDevicePanelId
CmValidateDeviceInterfaceName
DrvDbSplitDeviceIdDriverInfMatch
punycode_encode