天天看點

解讀 CreateMutexWin32A

解讀 CreateMutexWin32A

//----- (10029390) --------------------------------------------------------

void *__stdcall CreateMutexWin32A(const unsigned __int16 *a1, int a2)

{

  struct _SECURITY_ATTRIBUTES *v2; // [email protected]

  char *v3; // [email protected]

  const CHAR *v4; // [email protected]

  ACL *v5; // [email protected]

  HANDLE v6; // [email protected]

  char v8; // [sp+Ch] [bp-38h]@3

  int v9; // [sp+20h] [bp-24h]@4

  char *v10; // [sp+24h] [bp-20h]@4

  int v11; // [sp+28h] [bp-1Ch]@4

  int v12; // [sp+2Ch] [bp-18h]@1

  int v13; // [sp+30h] [bp-14h]@1

  unsigned int v14; // [sp+34h] [bp-10h]@1

  int v15; // [sp+40h] [bp-4h]@1   v2 = 0;

  v12 = 0;

  v13 = 0;

  v14 = 0;

  v15 = 0;

  v3 = (char *)CBuffer::Allocate((CBuffer *)&v12, wcslen(a1) + 2);

  v4 = v3;

  if ( !v3 || StringCbPrintfA(v3, v14, "%S", a1) < 0 )

    goto LABEL_12;

  v5 = BuildCustomizedSD(&v8);

  if ( v5 )

  {

    v11 = 0;

    v9 = 12;

    v2 = (struct _SECURITY_ATTRIBUTES *)&v9;

    v10 = &v8;

  }

  v6 = CreateMutexA(v2, 0, v4);

  FreeAdministratorSD(v5);

  if ( v6 )

  {

    if ( a2 )

      WaitForSingleObject(v6, 0xFFFFFFFF);

  }

  else

  {

LABEL_12:

    v6 = 0;

  }

  CBuffer::~CBuffer((CBuffer *)&v12);

  return v6;

}

繼續閱讀