DrvDbSplitDeviceIdDriverInfMatch
__int64 __fastcall DrvDbSplitDeviceIdDriverInfMatch(
STRSAFE_PCNZWCH pszSrc,
NTSTRSAFE_PWSTR pszDest,
size_t cchDest,
__int64 a4){
int v5;
unsigned int v7;
char v9;
WCHAR *v10;
WCHAR *v11;
__int64 v12;
WCHAR *v13;
WCHAR *v14;
int v15;
unsigned int v16;
unsigned int v18;
UINT64 dwFlags;
unsigned int v20;
v20 = cchDest;
v5 = 0;
v7 = cchDest;
v9 = -1;
v10 = wcschr((WCHAR *)pszSrc, 0x5Cu);
v11 = v10;
if( v10 )
{
v12 = v10 - pszSrc;
if( a4 )
{
v13 = wcschr(v10 + 1, 0x5Cu);
v14 = v13;
if( v13 )
{
*v13 = 0;
v18 = wcstol(v13 + 1, 0i64, 16i64);
if( v18 > 0xFF )
LOBYTE(v18) = -1;
v9 = v18;
}
if( v11[1] == 42 )
{
*(_BYTE *)a4 = 3;
LOWORD(v16) = 0;
}
else
{
v15 = wcstol(v11 + 1, 0i64, 16i64);
if( v15 )
{
v16 = v15 - 1;
*(_BYTE *)a4 = 2;
if( v16 > 0xFFFF )
LOWORD(v16) = -1;
}
else
{
*(_BYTE *)a4 = 1;
LOWORD(v16) = 0;
}
}
*(_WORD *)(a4 + 2) = v16;
if( v14 )
*v14 = 92;
v7 = v20;
}
}
else
{
v12 = -1i64;
do
++v12;
while( pszSrc[v12] );
if( a4 )
{
*(_BYTE *)a4 = 0;
*(_WORD *)(a4 + 2) = 0;
}
}
if( !pszDest
|| (LODWORD(dwFlags) = 2304,
v5 = RtlStringCchCopyNExW(pszDest, v7, (WCHAR *)pszSrc, (unsigned int)v12, 0i64, 0i64, dwFlags),
v5 >= 0) )
{
if( a4 )
*(_BYTE *)(a4 + 1) = v9;
}
return(unsigned int)v5;
}Referenced by:
DrvDbSetDeviceIdDriverInfMatches
PiDevCfgFindDeviceDriver