RtlStringCchCopyExW
INT64 __stdcall RtlStringCchCopyExW(
WCHAR *pszDest,
UINT64 cchDest,
WCHAR *pszSrc,
WCHAR **ppszDestEnd,
UINT64 *pcchRemaining,
UINT64 dwFlags){
int v9;
wchar_t *v10;
UINT64 v11;
WCHAR *v12;
NTSTATUS v13;
size_t v14;
UINT64 v16;
STRSAFE_LPWSTR ppszDestEnda;
size_t pcchNewDestLength;
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;
}
else
{
ppszDestEnda = pszDest;
v10 = pszDest;
pcchNewDestLength = cchDest;
v11 = cchDest;
if( (dwFlags & 0x100) != 0 )
{
v12 = (WCHAR *)&::ppszDestEnd;
if( pszSrc )
v12 = pszSrc;
pszSrc = v12;
}
v9 = 0;
if( (dwFlags & 0xFFFFE000) != 0 )
{
v9 = -1073741811;
if( cchDest )
*pszDest = 0;
}
else if( cchDest )
{
pcchNewDestLength = 0i64;
v13 = RtlStringCopyWorkerW(pszDest, cchDest, &pcchNewDestLength, pszSrc, v16);
v14 = pcchNewDestLength;
v9 = v13;
v11 = cchDest - pcchNewDestLength;
pcchNewDestLength = cchDest - pcchNewDestLength;
v10 = &pszDest[v14];
ppszDestEnda = v10;
if( v13 >= 0 )
{
if( (dwFlags & 0x200) != 0 && v11 > 1 && 2 * v11 > 2 )
memset((INT64)(v10 + 1), (unsigned __int8)dwFlags);
goto LABEL_13;
}
}
else
{
if( !*pszSrc )
{
LABEL_13:
if( ppszDestEnd )
*ppszDestEnd = v10;
if( pcchRemaining )
*pcchRemaining = v11;
return(unsigned int)v9;
}
v9 = pszDest != 0i64 ? -2147483643 : -1073741811;
}
if( (dwFlags & 0x1C00) != 0 && cchDest )
{
StringExHandleOtherFlagsW(
pszDest,
2 * cchDest,
(WCHAR **)pszSrc,
(UINT64 *)&ppszDestEnda,
(UINT64)&pcchNewDestLength);
v10 = ppszDestEnda;
v11 = pcchNewDestLength;
}
if( (int)(v9 + 0x80000000) < 0 || v9 == -2147483643 )
goto LABEL_13;
}
return(unsigned int)v9;
}Referenced by:
CmClassSubkeyCallback
CmDeviceClassesSubkeyCallback
CmDevicePanelEnumSubkeyCallback
CmEnumSubkeyCallback
CmGetDeviceChildren
CmGetDeviceInterfaceName
CmGetDeviceInterfaceReferenceString
CmGetDeviceInterfaceSubkeyPath
CmGetDeviceParent
CmGetMatchingDeviceListForSubkey
CmGetMatchingFilteredDeviceInterfaceListWorker
CmIsDeviceSafeRemovalRequired
DrvDbBuildDeviceIdDriverInfMatch
DrvDbDeleteObjectSubKey
DrvDbGetDeviceIdDriverInfMatches
DrvDbGetDriverDatabaseList
DrvDbGetDriverPackageMappedProperty
DrvDbGetObjectSubKeyCallback
IopGetDeviceInterfaces
PiCMCreateDevice
PiCMGenerateDeviceInstance
PiDevCfgQueryPolicyStringList
PiDmGetObjectListCallback
PiPnpRtlGetFilteredDeviceList
PnpGetDeviceDependencyList
PnpGetGenericStorePropertyLocales
PnpObjectListCallback
RegRtlCreateTreeTransacted
RegRtlDeletePathInternal