BapdpRegisterResumeInformation

VOID __stdcall BapdpRegisterResumeInformation(PVOID ResumeBuffer, UINT64 a2){
  WCHAR v2; 
  int v3; 
  WCHAR v5; 
  NTSTATUS v6; 
  void *v7; 
  WCHAR v8; 
  UINT64 CreateOptions; 
  UINT64 CreateOptionsa; 
  struct _UNICODE_STRING DestinationString; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  UINT64 Disposition; 
  void *KeyHandle; 
  HANDLE Handle; 
  if( ResumeBuffer )
  {
    LODWORD(Disposition) = 0;
    *(&ObjectAttributes.Length + 1) = 0;
    v3 = a2;
    *(&ObjectAttributes.Attributes + 1) = 0;
    DestinationString = 0i64;
    if( (_DWORD)a2 )
    {
      KeyHandle = 0i64;
      Handle = 0i64;
      RtlInitUnicodeString(&DestinationString, L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Control", v2);
      ObjectAttributes.RootDirectory = 0i64;
      ObjectAttributes.ObjectName = &DestinationString;
      ObjectAttributes.Length = 48;
      ObjectAttributes.Attributes = 576;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      if( ZwOpenKey(&KeyHandle, 0x20019u, &ObjectAttributes) >= 0 )
      {
        RtlInitUnicodeString(&DestinationString, L"Winresume", v5);
        ObjectAttributes.RootDirectory = KeyHandle;
        ObjectAttributes.Length = 48;
        ObjectAttributes.ObjectName = &DestinationString;
        ObjectAttributes.Attributes = 576;
        LODWORD(CreateOptions) = 1;
        *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
        v6 = ZwCreateKey(&Handle, 0x20019ui64, &ObjectAttributes, 0i64, 0i64, CreateOptions, &Disposition);
        v7 = KeyHandle;
        if( v6 >= 0 )
        {
          ZwClose(KeyHandle);
          RtlInitUnicodeString(&DestinationString, L"ResumeContext", v8);
          LODWORD(CreateOptionsa) = v3;
          ZwSetValueKey(Handle, &DestinationString, 0i64, 3ui64, ResumeBuffer, CreateOptionsa);
          v7 = Handle;
        }
        ZwClose(v7);
      }
    }
  }
}

Referenced by:

BapdpProcessResumeInformation