package advapi32;

use strict;

require Exporter;

use wine;
use vars qw(@ISA @EXPORT @EXPORT_OK);

@ISA = qw(Exporter);
@EXPORT = qw();
@EXPORT_OK = qw();

my $module_declarations = {
    "AccessCheck" => ["long",  ["ptr", "long", "long", "ptr", "ptr", "ptr", "ptr", "ptr"]],
    "AddAccessAllowedAce" => ["long",  ["ptr", "long", "long", "ptr"]],
    "AdjustTokenPrivileges" => ["long",  ["long", "long", "ptr", "long", "ptr", "ptr"]],
    "AllocateAndInitializeSid" => ["long",  ["ptr", "long", "long", "long", "long", "long", "long", "long", "long", "long", "ptr"]],
    "AllocateLocallyUniqueId" => ["long",  ["ptr"]],
    "BackupEventLogA" => ["long",  ["long", "str"]],
    "BackupEventLogW" => ["long",  ["long", "wstr"]],
    "ClearEventLogA" => ["long",  ["long", "str"]],
    "ClearEventLogW" => ["long",  ["long", "wstr"]],
    "CloseEventLog" => ["long",  ["long"]],
    "CloseServiceHandle" => ["long",  ["long"]],
    "ControlService" => ["long",  ["long", "long", "ptr"]],
    "CopySid" => ["long",  ["long", "ptr", "ptr"]],
    "CreateServiceA" => ["long",  ["long", "str", "str", "long", "long", "long", "long", "str", "str", "ptr", "str", "str", "str"]],
    "CreateServiceW" => ["long",  ["long", "wstr", "wstr", "long", "long", "long", "long", "wstr", "wstr", "ptr", "wstr", "wstr", "wstr"]],
    "CryptAcquireContextA" => ["long",  ["ptr", "str", "str", "long", "long"]],
    "CryptAcquireContextW" => ["long",  ["ptr", "wstr", "wstr", "long", "long"]],
    "CryptContextAddRef" => ["long",  ["long", "ptr", "long"]],
    "CryptCreateHash" => ["long",  ["long", "long", "long", "long", "ptr"]],
    "CryptDecrypt" => ["long",  ["long", "long", "long", "long", "ptr", "ptr"]],
    "CryptDeriveKey" => ["long",  ["long", "long", "long", "long", "ptr"]],
    "CryptDestroyHash" => ["long",  ["long"]],
    "CryptDestroyKey" => ["long",  ["long"]],
    "CryptDuplicateHash" => ["long",  ["long", "ptr", "long", "ptr"]],
    "CryptDuplicateKey" => ["long",  ["long", "ptr", "long", "ptr"]],
    "CryptEncrypt" => ["long",  ["long", "long", "long", "long", "ptr", "ptr", "long"]],
    "CryptEnumProviderTypesA" => ["long",  ["long", "ptr", "long", "ptr", "str", "ptr"]],
    "CryptEnumProviderTypesW" => ["long",  ["long", "ptr", "long", "ptr", "wstr", "ptr"]],
    "CryptEnumProvidersA" => ["long",  ["long", "ptr", "long", "ptr", "str", "ptr"]],
    "CryptEnumProvidersW" => ["long",  ["long", "ptr", "long", "ptr", "wstr", "ptr"]],
    "CryptExportKey" => ["long",  ["long", "long", "long", "long", "ptr", "ptr"]],
    "CryptGenKey" => ["long",  ["long", "long", "long", "ptr"]],
    "CryptGenRandom" => ["long",  ["long", "long", "ptr"]],
    "CryptGetDefaultProviderA" => ["long",  ["long", "ptr", "long", "str", "ptr"]],
    "CryptGetDefaultProviderW" => ["long",  ["long", "ptr", "long", "wstr", "ptr"]],
    "CryptGetHashParam" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
    "CryptGetKeyParam" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
    "CryptGetProvParam" => ["long",  ["long", "long", "ptr", "ptr", "long"]],
    "CryptGetUserKey" => ["long",  ["long", "long", "ptr"]],
    "CryptHashData" => ["long",  ["long", "ptr", "long", "long"]],
    "CryptHashSessionKey" => ["long",  ["long", "long", "long"]],
    "CryptImportKey" => ["long",  ["long", "ptr", "long", "long", "long", "ptr"]],
    "CryptReleaseContext" => ["long",  ["long", "long"]],
    "CryptSetHashParam" => ["long",  ["long", "long", "ptr", "long"]],
    "CryptSetKeyParam" => ["long",  ["long", "long", "ptr", "long"]],
    "CryptSetProvParam" => ["long",  ["long", "long", "ptr", "long"]],
    "CryptSetProviderA" => ["long",  ["str", "long"]],
    "CryptSetProviderExA" => ["long",  ["str", "long", "ptr", "long"]],
    "CryptSetProviderExW" => ["long",  ["wstr", "long", "ptr", "long"]],
    "CryptSetProviderW" => ["long",  ["wstr", "long"]],
    "CryptSignHashA" => ["long",  ["long", "long", "str", "long", "ptr", "ptr"]],
    "CryptSignHashW" => ["long",  ["long", "long", "str", "long", "ptr", "ptr"]],
    "CryptVerifySignatureA" => ["long",  ["long", "ptr", "long", "long", "str", "long"]],
    "CryptVerifySignatureW" => ["long",  ["long", "ptr", "long", "long", "str", "long"]],
    "DeleteService" => ["long",  ["long"]],
    "DeregisterEventSource" => ["long",  ["long"]],
    "EnumServicesStatusA" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr", "ptr"]],
    "EnumServicesStatusW" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr", "ptr"]],
    "EqualPrefixSid" => ["long",  ["ptr", "ptr"]],
    "EqualSid" => ["long",  ["ptr", "ptr"]],
    "FreeSid" => ["ptr",  ["ptr"]],
    "GetFileSecurityA" => ["long",  ["str", "long", "ptr", "long", "ptr"]],
    "GetFileSecurityW" => ["long",  ["wstr", "long", "ptr", "long", "ptr"]],
    "GetLengthSid" => ["long",  ["ptr"]],
    "GetNumberOfEventLogRecords" => ["long",  ["long", "ptr"]],
    "GetOldestEventLogRecord" => ["long",  ["long", "ptr"]],
    "GetSecurityDescriptorControl" => ["long",  ["ptr", "ptr", "ptr"]],
    "GetSecurityDescriptorDacl" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
    "GetSecurityDescriptorGroup" => ["long",  ["ptr", "ptr", "ptr"]],
    "GetSecurityDescriptorLength" => ["long",  ["ptr"]],
    "GetSecurityDescriptorOwner" => ["long",  ["ptr", "ptr", "ptr"]],
    "GetSecurityDescriptorSacl" => ["long",  ["ptr", "ptr", "ptr", "ptr"]],
    "GetSidIdentifierAuthority" => ["ptr",  ["ptr"]],
    "GetSidLengthRequired" => ["long",  ["long"]],
    "GetSidSubAuthority" => ["ptr",  ["ptr", "long"]],
    "GetSidSubAuthorityCount" => ["ptr",  ["ptr"]],
    "GetTokenInformation" => ["long",  ["long", "long", "ptr", "long", "ptr"]],
    "GetUserNameA" => ["long",  ["str", "ptr"]],
    "GetUserNameW" => ["long",  ["wstr", "ptr"]],
    "ImpersonateSelf" => ["long",  ["long"]],
    "InitializeAcl" => ["long",  ["ptr", "long", "long"]],
    "InitializeSecurityDescriptor" => ["long",  ["ptr", "long"]],
    "InitializeSid" => ["long",  ["ptr", "ptr", "long"]],
    "IsValidSecurityDescriptor" => ["long",  ["ptr"]],
    "IsValidSid" => ["long",  ["ptr"]],
    "LookupAccountNameA" => ["long",  ["str", "str", "ptr", "ptr", "str", "ptr", "ptr"]],
    "LookupAccountSidA" => ["long",  ["str", "ptr", "str", "ptr", "str", "ptr", "ptr"]],
    "LookupAccountSidW" => ["long",  ["wstr", "ptr", "wstr", "ptr", "wstr", "ptr", "ptr"]],
    "LookupPrivilegeValueA" => ["long",  ["str", "str", "ptr"]],
    "LookupPrivilegeValueW" => ["long",  ["wstr", "wstr", "ptr"]],
    "LsaClose" => ["long",  ["long"]],
    "LsaFreeMemory" => ["long",  ["ptr"]],
    "LsaLookupSids" => ["long",  ["long", "long", "ptr", "ptr", "ptr"]],
    "LsaOpenPolicy" => ["long",  ["ptr", "ptr", "long", "ptr"]],
    "LsaQueryInformationPolicy" => ["long",  ["long", "long", "ptr"]],
    "MakeSelfRelativeSD" => ["long",  ["ptr", "ptr", "ptr"]],
    "NotifyBootConfigStatus" => ["long",  ["long"]],
    "NotifyChangeEventLog" => ["long",  ["long", "long"]],
    "OpenBackupEventLogA" => ["long",  ["str", "str"]],
    "OpenBackupEventLogW" => ["long",  ["wstr", "wstr"]],
    "OpenEventLogA" => ["long",  ["str", "str"]],
    "OpenEventLogW" => ["long",  ["wstr", "wstr"]],
    "OpenProcessToken" => ["long",  ["long", "long", "ptr"]],
    "OpenSCManagerA" => ["long",  ["str", "str", "long"]],
    "OpenSCManagerW" => ["long",  ["wstr", "wstr", "long"]],
    "OpenServiceA" => ["long",  ["long", "str", "long"]],
    "OpenServiceW" => ["long",  ["long", "wstr", "long"]],
    "OpenThreadToken" => ["long",  ["long", "long", "long", "ptr"]],
    "QueryServiceStatus" => ["long",  ["long", "ptr"]],
    "QueryWindows31FilesMigration" => ["long",  ["long"]],
    "ReadEventLogA" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
    "ReadEventLogW" => ["long",  ["long", "long", "long", "ptr", "long", "ptr", "ptr"]],
    "RegCloseKey" => ["long",  ["long"]],
    "RegConnectRegistryA" => ["long",  ["str", "long", "ptr"]],
    "RegConnectRegistryW" => ["long",  ["wstr", "long", "ptr"]],
    "RegCreateKeyA" => ["long",  ["long", "str", "ptr"]],
    "RegCreateKeyExA" => ["long",  ["long", "str", "long", "str", "long", "long", "ptr", "ptr", "ptr"]],
    "RegCreateKeyExW" => ["long",  ["long", "wstr", "long", "wstr", "long", "long", "ptr", "ptr", "ptr"]],
    "RegCreateKeyW" => ["long",  ["long", "wstr", "ptr"]],
    "RegDeleteKeyA" => ["long",  ["long", "str"]],
    "RegDeleteKeyW" => ["long",  ["long", "wstr"]],
    "RegDeleteValueA" => ["long",  ["long", "str"]],
    "RegDeleteValueW" => ["long",  ["long", "wstr"]],
    "RegEnumKeyA" => ["long",  ["long", "long", "str", "long"]],
    "RegEnumKeyExA" => ["long",  ["long", "long", "str", "ptr", "ptr", "str", "ptr", "ptr"]],
    "RegEnumKeyExW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "wstr", "ptr", "ptr"]],
    "RegEnumKeyW" => ["long",  ["long", "long", "wstr", "long"]],
    "RegEnumValueA" => ["long",  ["long", "long", "str", "ptr", "ptr", "ptr", "ptr", "ptr"]],
    "RegEnumValueW" => ["long",  ["long", "long", "wstr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
    "RegFlushKey" => ["long",  ["long"]],
    "RegGetKeySecurity" => ["long",  ["long", "long", "ptr", "ptr"]],
    "RegLoadKeyA" => ["long",  ["long", "str", "str"]],
    "RegLoadKeyW" => ["long",  ["long", "wstr", "wstr"]],
    "RegNotifyChangeKeyValue" => ["long",  ["long", "long", "long", "long", "long"]],
    "RegOpenCurrentUser" => ["long",  ["long", "ptr"]],
    "RegOpenKeyA" => ["long",  ["long", "str", "ptr"]],
    "RegOpenKeyExA" => ["long",  ["long", "str", "long", "long", "ptr"]],
    "RegOpenKeyExW" => ["long",  ["long", "wstr", "long", "long", "ptr"]],
    "RegOpenKeyW" => ["long",  ["long", "wstr", "ptr"]],
    "RegQueryInfoKeyA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
    "RegQueryInfoKeyW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr", "ptr"]],
    "RegQueryValueA" => ["long",  ["long", "str", "str", "ptr"]],
    "RegQueryValueExA" => ["long",  ["long", "str", "ptr", "ptr", "ptr", "ptr"]],
    "RegQueryValueExW" => ["long",  ["long", "wstr", "ptr", "ptr", "ptr", "ptr"]],
    "RegQueryValueW" => ["long",  ["long", "wstr", "wstr", "ptr"]],
    "RegReplaceKeyW" => ["long",  ["long", "wstr", "wstr", "wstr"]],
    "RegRestoreKeyA" => ["long",  ["long", "str", "long"]],
    "RegRestoreKeyW" => ["long",  ["long", "wstr", "long"]],
    "RegSaveKeyA" => ["long",  ["long", "str", "ptr"]],
    "RegSaveKeyW" => ["long",  ["long", "wstr", "ptr"]],
    "RegSetKeySecurity" => ["long",  ["long", "long", "ptr"]],
    "RegSetValueA" => ["long",  ["long", "str", "long", "str", "long"]],
    "RegSetValueExA" => ["long",  ["long", "str", "long", "long", "ptr", "long"]],
    "RegSetValueExW" => ["long",  ["long", "wstr", "long", "long", "ptr", "long"]],
    "RegSetValueW" => ["long",  ["long", "wstr", "long", "wstr", "long"]],
    "RegUnLoadKeyA" => ["long",  ["long", "str"]],
    "RegUnLoadKeyW" => ["long",  ["long", "wstr"]],
    "RegisterEventSourceA" => ["long",  ["str", "str"]],
    "RegisterEventSourceW" => ["long",  ["wstr", "wstr"]],
    "RegisterServiceCtrlHandlerA" => ["long",  ["str", "ptr"]],
    "RegisterServiceCtrlHandlerW" => ["long",  ["wstr", "ptr"]],
    "ReportEventA" => ["long",  ["long", "long", "long", "long", "ptr", "long", "long", "ptr", "ptr"]],
    "ReportEventW" => ["long",  ["long", "long", "long", "long", "ptr", "long", "long", "ptr", "ptr"]],
    "RevertToSelf" => ["long",  []],
    "SetFileSecurityA" => ["long",  ["str", "long", "ptr"]],
    "SetFileSecurityW" => ["long",  ["wstr", "long", "ptr"]],
    "SetKernelObjectSecurity" => ["long",  ["long", "long", "ptr"]],
    "SetSecurityDescriptorDacl" => ["long",  ["ptr", "long", "ptr", "long"]],
    "SetSecurityDescriptorGroup" => ["long",  ["ptr", "ptr", "long"]],
    "SetSecurityDescriptorOwner" => ["long",  ["ptr", "ptr", "long"]],
    "SetSecurityDescriptorSacl" => ["long",  ["ptr", "long", "ptr", "long"]],
    "SetServiceStatus" => ["long",  ["long", "ptr"]],
    "SetThreadToken" => ["long",  ["ptr", "long"]],
    "StartServiceA" => ["long",  ["long", "long", "ptr"]],
    "StartServiceCtrlDispatcherA" => ["long",  ["ptr"]],
    "StartServiceCtrlDispatcherW" => ["long",  ["ptr"]],
    "StartServiceW" => ["long",  ["long", "long", "ptr"]],
    "SynchronizeWindows31FilesAndWindowsNTRegistry" => ["long",  ["long", "long", "long", "long"]]
};

&wine::declare("advapi32",%$module_declarations);
push @EXPORT, map { "&" . $_; } sort(keys(%$module_declarations));
1;
