KsepStringDuplicateUnicode

NTSTATUS __stdcall KsepStringDuplicateUnicode(_UNICODE_STRING *TargetString, _UNICODE_STRING *SourceString){
  unsigned __int64 v4; 
  UINT8 *v5; 
  wchar_t *v6; 
  NTSTATUS result; 
  __int64 v8; 
  if( !SourceString )
  {
    v8 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryErrorsIndex, 1u) + 1) & 0x3F;
    KsepHistoryErrors[2 * v8 + 1] = -1073740768;
    KsepHistoryErrors[2 * v8] = 197261;
    if( (KsepDebugFlag & 4) != 0 )
      RtlAssert("SourceString != NULL", "minkernel\\ntos\\kshim\\ksemisc.c", 0x28Du, 0i64);
  }
  *TargetString = 0i64;
  v4 = SourceString->Length + 2i64;
  KsepPoolAllocatePaged(v4);
  v6 = (wchar_t *)v5;
  if( !v5 )
    return -1073741801;
  memmove(v5, (UINT8 *)SourceString->Buffer, v4 - 2);
  v6[(v4 >> 1) - 1] = 0;
  TargetString->Buffer = v6;
  TargetString->Length = v4 - 2;
  result = 0;
  TargetString->MaximumLength = v4;
  return result;
}

Referenced by:

KseDriverLoadImage
KseShimDriverIoCallbacks