DrvDbGetDriverPackageSignerName

NTSTATUS __stdcall DrvDbGetDriverPackageSignerName(
        VOID *ObjectBaseKey,
        WCHAR *SignerName,
        VOID *SignerNameLen,
        WCHAR *RequiredLen,
        UINT64 SignerNameLena,
        UINT64 *RequiredLena){
  UINT64 *v6; 
  _DEVPROPKEY **v8; 
  __int64 v9; 
  _DEVPROPKEY *v10; 
  __int64 v11; 
  NTSTATUS result; 
  const _DRVDB_PROPERTY_REG_VALUE_MAP *v13; 
  UINT64 PropertySize; 
  UINT8 PropertyBuffer; 
  UINT64 ObjectBaseKeya; 

  HIDWORD(ObjectBaseKeya) = HIDWORD(SignerName);
  v6 = RequiredLena;
  LODWORD(ObjectBaseKeya) = 0;
  v8 = &off_140001760;
  *(_DWORD *)RequiredLena = 0;
  v9 = 0i64;
  while( 1 )
  {
    v10 = *v8;
    if( (*v8)->pid == 7 )
    {
      v11 = *(_QWORD *)&v10->fmtid.Data1 - *(_QWORD *)&DEVPKEY_DriverPackage_SignerName.fmtid.Data1;
      if( *(_QWORD *)&v10->fmtid.Data1 == *(_QWORD *)&DEVPKEY_DriverPackage_SignerName.fmtid.Data1 )
        v11 = *(_QWORD *)v10->fmtid.Data4 - *(_QWORD *)DEVPKEY_DriverPackage_SignerName.fmtid.Data4;
      if( !v11 )
        break;
    }
    v9 = (unsigned int)(v9 + 1);
    v8 += 5;
    if( (unsigned int)v9 >= 0x20 )
      return -1073741595;
  }
  v13 = (const _DRVDB_PROPERTY_REG_VALUE_MAP *)&(&off_140001760)[5 * v9];
  if( !v13 )
    return -1073741595;
  LODWORD(PropertySize) = 2 * SignerNameLena;
  result = DrvDbGetRegValueMappedProperty(
             &ObjectBaseKeya,
             SignerNameLen,
             v13,
             &PropertyBuffer,
             RequiredLen,
             PropertySize,
             &ObjectBaseKeya);
  if( (int)(result + 0x80000000) < 0 || result == -1073741789 )
    *(_DWORD *)v6 = (unsigned int)ObjectBaseKeya >> 1;
  return result;
}

Referenced by:

DrvDbSetDriverPackageMappedProperty