KsepStringDuplicate
NTSTATUS __stdcall KsepStringDuplicate(_UNICODE_STRING *TargetString, PWCHAR SourceString){
__int64 v4;
unsigned __int64 v5;
wchar_t *Paged;
wchar_t *v7;
NTSTATUS result;
__int64 v9;
if( !SourceString )
{
v9 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryErrorsIndex, 1u) + 1) & 0x3F;
KsepHistoryErrors[2 * v9 + 1] = -1073740768;
KsepHistoryErrors[2 * v9] = 197202;
if( (KsepDebugFlag & 4) != 0 )
RtlAssert("SourceString != NULL", "minkernel\\ntos\\kshim\\ksemisc.c", 594i64, 0i64);
}
v4 = -1i64;
*TargetString = 0i64;
do
++v4;
while( SourceString[v4] );
v5 = 2 * v4 + 2;
if( v5 > 0xFFFE )
return -1073741306;
Paged = (wchar_t *)KsepPoolAllocatePaged(v5);
v7 = Paged;
if( !Paged )
return -1073741801;
memmove(Paged, SourceString, v5);
TargetString->Buffer = v7;
TargetString->Length = v5 - 2;
result = 0;
TargetString->MaximumLength = v5;
return result;
}Referenced by:
KseAddHardwareId
KsepCacheDeviceInsertData
KsepDbCacheReadDevice
KsepDbGetSdbString
KsepEngineGetShimsFromRegistry
KsepRegistryCreateKey
KsepRegistryOpenKey
KsepStringSplitMultiString
KsepStringTransform