From 69bdc10aedcbd24f823da217c2108c02247ece9d Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 2 Feb 2005 19:09:33 +0000 Subject: [PATCH] - Implement DoesUserHavePrivilege, EnablePrivilege, IsUserAdmin, MultiByteToUnicode and UnicodeToMultiByte. - Sort prototypes in setupapi.h and a few function in spec. --- dlls/setupapi/misc.c | 296 +++++++++++++++++++++++++++++++++++- dlls/setupapi/setupapi.spec | 14 +- include/setupapi.h | 163 +++++++++++--------- 3 files changed, 385 insertions(+), 88 deletions(-) diff --git a/dlls/setupapi/misc.c b/dlls/setupapi/misc.c index dfbe49bb047..bb7eda14d30 100644 --- a/dlls/setupapi/misc.c +++ b/dlls/setupapi/misc.c @@ -28,6 +28,9 @@ #include "setupapi.h" #include "wine/unicode.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(setupapi); /************************************************************************** @@ -41,9 +44,9 @@ * RETURNS * None */ - VOID WINAPI MyFree(LPVOID lpMem) { + TRACE("%p\n", lpMem); HeapFree(GetProcessHeap(), 0, lpMem); } @@ -60,9 +63,9 @@ VOID WINAPI MyFree(LPVOID lpMem) * Success: pointer to allocated memory block * Failure: NULL */ - LPVOID WINAPI MyMalloc(DWORD dwSize) { + TRACE("%lu\n", dwSize); return HeapAlloc(GetProcessHeap(), 0, dwSize); } @@ -85,9 +88,10 @@ LPVOID WINAPI MyMalloc(DWORD dwSize) * If lpSrc is a NULL-pointer, then MyRealloc allocates a memory * block like MyMalloc. */ - LPVOID WINAPI MyRealloc(LPVOID lpSrc, DWORD dwSize) { + TRACE("%p %lu\n", lpSrc, dwSize); + if (lpSrc == NULL) return HeapAlloc(GetProcessHeap(), 0, dwSize); @@ -110,11 +114,12 @@ LPVOID WINAPI MyRealloc(LPVOID lpSrc, DWORD dwSize) * NOTES * Call MyFree() to release the duplicated string. */ - LPWSTR WINAPI DuplicateString(LPCWSTR lpSrc) { LPWSTR lpDst; + TRACE("%s\n", debugstr_w(lpSrc)); + lpDst = MyMalloc((lstrlenW(lpSrc) + 1) * sizeof(WCHAR)); if (lpDst == NULL) return NULL; @@ -145,7 +150,6 @@ LPWSTR WINAPI DuplicateString(LPCWSTR lpSrc) * NOTES * Use MyFree to release the lpData buffer. */ - LONG WINAPI QueryRegistryValue(HKEY hKey, LPCWSTR lpValueName, LPBYTE *lpData, @@ -154,6 +158,9 @@ LONG WINAPI QueryRegistryValue(HKEY hKey, { LONG lError; + TRACE("%p %s %p %p %p\n", + hKey, debugstr_w(lpValueName), lpData, lpType, lpcbData); + /* Get required buffer size */ *lpcbData = 0; lError = RegQueryValueExW(hKey, lpValueName, 0, lpType, NULL, lpcbData); @@ -172,3 +179,282 @@ LONG WINAPI QueryRegistryValue(HKEY hKey, return lError; } + + +/************************************************************************** + * IsUserAdmin [SETUPAPI.@] + * + * Checks whether the current user is a member of the Administrators group. + * + * PARAMS + * None + * + * RETURNS + * Success: TRUE + * Failure: FALSE + */ +BOOL WINAPI IsUserAdmin(VOID) +{ + SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY}; + HANDLE hToken; + DWORD dwSize; + PTOKEN_GROUPS lpGroups; + PSID lpSid; + DWORD i; + BOOL bResult = FALSE; + + TRACE("\n"); + + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) + { + return FALSE; + } + + if (!GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwSize)) + { + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + CloseHandle(hToken); + return FALSE; + } + } + + lpGroups = MyMalloc(dwSize); + if (lpGroups == NULL) + { + CloseHandle(hToken); + return FALSE; + } + + if (!GetTokenInformation(hToken, TokenGroups, lpGroups, dwSize, &dwSize)) + { + MyFree(lpGroups); + CloseHandle(hToken); + return FALSE; + } + + CloseHandle(hToken); + + if (!AllocateAndInitializeSid(&Authority, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, + &lpSid)) + { + MyFree(lpGroups); + return FALSE; + } + + for (i = 0; i < lpGroups->GroupCount; i++) + { + if (EqualSid(lpSid, &lpGroups->Groups[i].Sid)) + { + bResult = TRUE; + break; + } + } + + FreeSid(lpSid); + MyFree(lpGroups); + + return bResult; +} + + +/************************************************************************** + * MultiByteToUnicode [SETUPAPI.@] + * + * Converts a multi-byte string to a Unicode string. + * + * PARAMS + * lpMultiByteStr [I] Multi-byte string to be converted + * uCodePage [I] Code page + * + * RETURNS + * Success: pointer to the converted Unicode string + * Failure: NULL + * + * NOTE + * Use MyFree to release the returned Unicode string. + */ +LPWSTR WINAPI MultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage) +{ + LPWSTR lpUnicodeStr; + int nLength; + + TRACE("%s %d\n", debugstr_a(lpMultiByteStr), uCodePage); + + nLength = MultiByteToWideChar(uCodePage, 0, lpMultiByteStr, + -1, NULL, 0); + if (nLength == 0) + return NULL; + + lpUnicodeStr = MyMalloc(nLength * sizeof(WCHAR)); + if (lpUnicodeStr == NULL) + return NULL; + + if (!MultiByteToWideChar(uCodePage, 0, lpMultiByteStr, + nLength, lpUnicodeStr, nLength)) + { + MyFree(lpUnicodeStr); + return NULL; + } + + return lpUnicodeStr; +} + + +/************************************************************************** + * UnicodeToMultiByte [SETUPAPI.@] + * + * Converts a Unicode string to a multi-byte string. + * + * PARAMS + * lpUnicodeStr [I] Unicode string to be converted + * uCodePage [I] Code page + * + * RETURNS + * Success: pointer to the converted multi-byte string + * Failure: NULL + * + * NOTE + * Use MyFree to release the returned multi-byte string. + */ +LPSTR WINAPI UnicodeToMultiByte(LPCWSTR lpUnicodeStr, UINT uCodePage) +{ + LPSTR lpMultiByteStr; + int nLength; + + TRACE("%s %d\n", debugstr_w(lpUnicodeStr), uCodePage); + + nLength = WideCharToMultiByte(uCodePage, 0, lpUnicodeStr, -1, + NULL, 0, NULL, NULL); + if (nLength == 0) + return NULL; + + lpMultiByteStr = MyMalloc(nLength); + if (lpMultiByteStr == NULL) + return NULL; + + if (!WideCharToMultiByte(uCodePage, 0, lpUnicodeStr, -1, + lpMultiByteStr, nLength, NULL, NULL)) + { + MyFree(lpMultiByteStr); + return NULL; + } + + return lpMultiByteStr; +} + + +/************************************************************************** + * DoesUserHavePrivilege [SETUPAPI.@] + * + * Check whether the current user has got a given privilege. + * + * PARAMS + * lpPrivilegeName [I] Name of the privilege to be checked + * + * RETURNS + * Success: TRUE + * Failure: FALSE + */ +BOOL WINAPI DoesUserHavePrivilege(LPCWSTR lpPrivilegeName) +{ + HANDLE hToken; + DWORD dwSize; + PTOKEN_PRIVILEGES lpPrivileges; + LUID PrivilegeLuid; + DWORD i; + BOOL bResult = FALSE; + + TRACE("%s\n", debugstr_w(lpPrivilegeName)); + + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) + return FALSE; + + if (!GetTokenInformation(hToken, TokenPrivileges, NULL, 0, &dwSize)) + { + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + CloseHandle(hToken); + return FALSE; + } + } + + lpPrivileges = MyMalloc(dwSize); + if (lpPrivileges == NULL) + { + CloseHandle(hToken); + return FALSE; + } + + if (!GetTokenInformation(hToken, TokenPrivileges, lpPrivileges, dwSize, &dwSize)) + { + MyFree(lpPrivileges); + CloseHandle(hToken); + return FALSE; + } + + CloseHandle(hToken); + + if (!LookupPrivilegeValueW(NULL, lpPrivilegeName, &PrivilegeLuid)) + { + MyFree(lpPrivileges); + return FALSE; + } + + for (i = 0; i < lpPrivileges->PrivilegeCount; i++) + { + if (lpPrivileges->Privileges[i].Luid.HighPart == PrivilegeLuid.HighPart && + lpPrivileges->Privileges[i].Luid.LowPart == PrivilegeLuid.LowPart) + { + bResult = TRUE; + } + } + + MyFree(lpPrivileges); + + return bResult; +} + + +/************************************************************************** + * EnablePrivilege [SETUPAPI.@] + * + * Enables or disables one of the current users privileges. + * + * PARAMS + * lpPrivilegeName [I] Name of the privilege to be changed + * bEnable [I] TRUE: Enables the privilege + * FALSE: Disables the privilege + * + * RETURNS + * Success: TRUE + * Failure: FALSE + */ +BOOL WINAPI EnablePrivilege(LPCWSTR lpPrivilegeName, BOOL bEnable) +{ + TOKEN_PRIVILEGES Privileges; + HANDLE hToken; + BOOL bResult; + + TRACE("%s %s\n", debugstr_w(lpPrivilegeName), bEnable ? "TRUE" : "FALSE"); + + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) + return FALSE; + + Privileges.PrivilegeCount = 1; + Privileges.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0; + + if (!LookupPrivilegeValueW(NULL, lpPrivilegeName, + &Privileges.Privileges[0].Luid)) + { + CloseHandle(hToken); + return FALSE; + } + + bResult = AdjustTokenPrivileges(hToken, FALSE, &Privileges, 0, NULL, NULL); + + CloseHandle(hToken); + + return bResult; +} diff --git a/dlls/setupapi/setupapi.spec b/dlls/setupapi/setupapi.spec index 22a164c6716..9ecca648230 100644 --- a/dlls/setupapi/setupapi.spec +++ b/dlls/setupapi/setupapi.spec @@ -97,8 +97,6 @@ @ stub CM_Get_Device_Interface_List_SizeW @ stub CM_Get_Device_Interface_List_Size_ExA @ stub CM_Get_Device_Interface_List_Size_ExW -@ stub CM_Request_Device_EjectA -@ stub CM_Request_Device_EjectW @ stub CM_Get_First_Log_Conf @ stub CM_Get_First_Log_Conf_Ex @ stub CM_Get_Global_State @@ -164,6 +162,8 @@ @ stub CM_Remove_SubTree_Ex @ stub CM_Remove_Unmarked_Children @ stub CM_Remove_Unmarked_Children_Ex +@ stub CM_Request_Device_EjectA +@ stub CM_Request_Device_EjectW @ stub CM_Request_Eject_PC @ stub CM_Reset_Children_Marks @ stub CM_Reset_Children_Marks_Ex @@ -197,9 +197,9 @@ @ stub DelayedMove @ stub DelimStringToMultiSz @ stub DestroyTextFileReadBuffer -@ stub DoesUserHavePrivilege +@ stdcall DoesUserHavePrivilege(wstr) @ stdcall DuplicateString(wstr) -@ stub EnablePrivilege +@ stdcall EnablePrivilege(wstr long) @ stub ExtensionPropSheetPageProc @ stub FileExists @ stub FreeStringArray @@ -214,10 +214,10 @@ @ stdcall InstallHinfSectionW(long long wstr long) @ stub InstallStop @ stub InstallStopEx -@ stub IsUserAdmin +@ stdcall IsUserAdmin() @ stub LookUpStringInTable @ stub MemoryInitialize -@ stub MultiByteToUnicode +@ stdcall MultiByteToUnicode(str long) @ stub MultiSzFromSearchControl @ stdcall MyFree(ptr) @ stub MyGetFileTitle @@ -527,7 +527,7 @@ @ stub StringTableStringFromId @ stub StringTableTrim @ stub TakeOwnershipOfFile -@ stub UnicodeToMultiByte +@ stdcall UnicodeToMultiByte(wstr long) @ stub UnmapAndCloseFile @ stub VerifyCatalogFile @ stub VerifyFile diff --git a/include/setupapi.h b/include/setupapi.h index a64f2cb6aa3..763b07202e7 100644 --- a/include/setupapi.h +++ b/include/setupapi.h @@ -664,90 +664,28 @@ DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS) #define SPDRP_INSTALL_STATE 0x00000022 #define SPDRP_MAXIMUM_PROPERTY 0x00000023 -void WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, LPCSTR cmdline, INT show ); -void WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, LPCWSTR cmdline, INT show ); + +LONG WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3); +BOOL WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName); +PWSTR WINAPI DuplicateString(PCWSTR lpSrc); +BOOL WINAPI EnablePrivilege(PCWSTR lpPrivilegeName, BOOL bEnable); +void WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, PCSTR cmdline, INT show ); +void WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, PCWSTR cmdline, INT show ); #define InstallHinfSection WINELIB_NAME_AW(InstallHinfSection) -HINF WINAPI SetupOpenInfFileA( PCSTR name, PCSTR pszclass, DWORD style, UINT *error ); -HINF WINAPI SetupOpenInfFileW( PCWSTR name, PCWSTR pszclass, DWORD style, UINT *error ); -#define SetupOpenInfFile WINELIB_NAME_AW(SetupOpenInfFile) -BOOL WINAPI SetupOpenAppendInfFileA( PCSTR, HINF, UINT * ); -BOOL WINAPI SetupOpenAppendInfFileW( PCWSTR, HINF, UINT * ); -#define SetupOpenAppendInfFile WINELIB_NAME_AW(SetupOpenAppendInfFile) -HINF WINAPI SetupOpenMasterInf( VOID ); -void WINAPI SetupCloseInfFile( HINF hinf ); -BOOL WINAPI SetupGetLineByIndexA( HINF, PCSTR, DWORD, INFCONTEXT * ); -BOOL WINAPI SetupGetLineByIndexW( HINF, PCWSTR, DWORD, INFCONTEXT * ); -#define SetupGetLineByIndex WINELIB_NAME_AW(SetupGetLineByIndex) -LONG WINAPI SetupGetLineCountA( HINF hinf, PCSTR section ); -LONG WINAPI SetupGetLineCountW( HINF hinf, PCWSTR section ); -#define SetupGetLineCount WINELIB_NAME_AW(SetupGetLineCount) -BOOL WINAPI SetupFindFirstLineA( HINF hinf, PCSTR section, PCSTR key, INFCONTEXT *context ); -BOOL WINAPI SetupFindFirstLineW( HINF hinf, PCWSTR section, PCWSTR key, INFCONTEXT *context ); -#define SetupFindFirstLine WINELIB_NAME_AW(SetupFindFirstLine) -BOOL WINAPI SetupFindNextLine( PINFCONTEXT context_in, PINFCONTEXT context_out ); -BOOL WINAPI SetupFindNextMatchLineA( PINFCONTEXT context_in, PCSTR key, PINFCONTEXT context_out ); -BOOL WINAPI SetupFindNextMatchLineW( PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out ); -#define SetupFindNextMatchLine WINELIB_NAME_AW(SetupFindNextMatchLine) -BOOL WINAPI SetupGetLineTextA( PINFCONTEXT context, HINF hinf, PCSTR section_name,PCSTR key_name, PSTR buffer, DWORD size, PDWORD required ); -BOOL WINAPI SetupGetLineTextW( PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required ); -#define SetupGetLineText WINELIB_NAME_AW(SetupGetLineText) -DWORD WINAPI SetupGetFieldCount( PINFCONTEXT context ); -BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result ); -BOOL WINAPI SetupGetStringFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, PDWORD required ); -BOOL WINAPI SetupGetStringFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, PDWORD required ); -#define SetupGetStringField WINELIB_NAME_AW(SetupGetStringField) -BOOL WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, DWORD size, LPDWORD required ); -BOOL WINAPI SetupGetMultiSzFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, LPDWORD required ); -BOOL WINAPI SetupGetMultiSzFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, LPDWORD required ); -#define SetupGetMultiSzField WINELIB_NAME_AW(SetupGetMultiSzField) -BOOL WINAPI SetupSetDirectoryIdA( HINF, DWORD, PCSTR ); -BOOL WINAPI SetupSetDirectoryIdW( HINF, DWORD, PCWSTR ); -#define SetupSetDirectoryId WINELIB_NAME_AW(SetupSetDirectoryId) -HSPFILEQ WINAPI SetupOpenFileQueue(void); +BOOL WINAPI IsUserAdmin(VOID); +PWSTR WINAPI MultiByteToUnicode(PCSTR lpMultiByteStr, UINT uCodePage); +VOID WINAPI MyFree(PVOID lpMem); +PVOID WINAPI MyMalloc(DWORD dwSize); +PVOID WINAPI MyRealloc(PVOID lpSrc, DWORD dwSize); +LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE *, PDWORD, PDWORD); BOOL WINAPI SetupCloseFileQueue( HSPFILEQ ); -BOOL WINAPI SetupSetFileQueueAlternatePlatformA( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR ); -BOOL WINAPI SetupSetFileQueueAlternatePlatformW( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR ); -#define SetupSetFileQueueAlternatePlatform WINELIB_NAME_AW(SetupSetFileQueueAlternatePlatform) -BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD); -BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD); -#define SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy) -BOOL WINAPI SetupQueueCopyIndirectA( PSP_FILE_COPY_PARAMS_A ); -BOOL WINAPI SetupQueueCopyIndirectW( PSP_FILE_COPY_PARAMS_W ); -#define SetupQueueCopyIndirect WINELIB_NAME_AW(SetupQueueCopyIndirect) -BOOL WINAPI SetupQueueDefaultCopyA( HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD ); -BOOL WINAPI SetupQueueDefaultCopyW( HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD ); -#define SetupQueueDefaultCopy WINELIB_NAME_AW(SetupQueueDefaultCopy) -BOOL WINAPI SetupQueueDeleteA( HSPFILEQ, PCSTR, PCSTR ); -BOOL WINAPI SetupQueueDeleteW( HSPFILEQ, PCWSTR, PCWSTR ); -#define SetupQueueDelete WINELIB_NAME_AW(SetupQueueDelete) -BOOL WINAPI SetupQueueRenameA( HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR ); -BOOL WINAPI SetupQueueRenameW( HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR ); -#define SetupQueueRename WINELIB_NAME_AW(SetupQueueRename) +void WINAPI SetupCloseInfFile( HINF hinf ); BOOL WINAPI SetupCommitFileQueueA( HWND, HSPFILEQ, PSP_FILE_CALLBACK_A, PVOID ); BOOL WINAPI SetupCommitFileQueueW( HWND, HSPFILEQ, PSP_FILE_CALLBACK_W, PVOID ); #define SetupCommitFileQueue WINELIB_NAME_AW(SetupCommitFileQueue) -BOOL WINAPI SetupScanFileQueueA( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD ); -BOOL WINAPI SetupScanFileQueueW( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD ); -#define SetupScanFileQueue WINELIB_NAME_AW(SetupScanFileQueue) -BOOL WINAPI SetupGetFileQueueCount( HSPFILEQ, UINT, PUINT ); -BOOL WINAPI SetupGetFileQueueFlags( HSPFILEQ, PDWORD ); -BOOL WINAPI SetupSetFileQueueFlags( HSPFILEQ, DWORD, DWORD ); -BOOL WINAPI SetupQueueCopySectionA( HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD ); -BOOL WINAPI SetupQueueCopySectionW( HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD ); -#define SetupQueueCopySection WINELIB_NAME_AW(SetupQueueCopySection) -BOOL WINAPI SetupQueueDeleteSectionA( HSPFILEQ, HINF, HINF, PCSTR ); -BOOL WINAPI SetupQueueDeleteSectionW( HSPFILEQ, HINF, HINF, PCWSTR ); -#define SetupQueueDeleteSection WINELIB_NAME_AW(SetupQueueDeleteSection) -BOOL WINAPI SetupQueueRenameSectionA( HSPFILEQ, HINF, HINF, PCSTR ); -BOOL WINAPI SetupQueueRenameSectionW( HSPFILEQ, HINF, HINF, PCWSTR ); -#define SetupQueueRenameSection WINELIB_NAME_AW(SetupQueueRenameSection) -PVOID WINAPI SetupInitDefaultQueueCallback( HWND ); -PVOID WINAPI SetupInitDefaultQueueCallbackEx( HWND, HWND, UINT, DWORD, PVOID ); -void WINAPI SetupTermDefaultQueueCallback( PVOID ); UINT WINAPI SetupDefaultQueueCallbackA( PVOID, UINT, UINT_PTR, UINT_PTR ); UINT WINAPI SetupDefaultQueueCallbackW( PVOID, UINT, UINT_PTR, UINT_PTR ); #define SetupDefaultQueueCallback WINELIB_NAME_AW(SetupDefaultQueueCallback) - BOOL WINAPI SetupDiBuildClassInfoList(DWORD, LPGUID, DWORD, PDWORD); BOOL WINAPI SetupDiBuildClassInfoListExA(DWORD, LPGUID, DWORD, PDWORD, PCSTR, PVOID); BOOL WINAPI SetupDiBuildClassInfoListExW(DWORD, LPGUID, DWORD, PDWORD, PCWSTR, PVOID); @@ -795,6 +733,35 @@ HKEY WINAPI SetupDiOpenClassRegKey(const GUID*, REGSAM); HKEY WINAPI SetupDiOpenClassRegKeyExA(const GUID*, REGSAM, DWORD, PCSTR, PVOID); HKEY WINAPI SetupDiOpenClassRegKeyExW(const GUID*, REGSAM, DWORD, PCWSTR, PVOID); #define SetupDiOpenClassRegKeyEx WINELIB_NAME_AW(SetupDiOpenClassRegKeyEx) +BOOL WINAPI SetupFindFirstLineA( HINF hinf, PCSTR section, PCSTR key, INFCONTEXT *context ); +BOOL WINAPI SetupFindFirstLineW( HINF hinf, PCWSTR section, PCWSTR key, INFCONTEXT *context ); +#define SetupFindFirstLine WINELIB_NAME_AW(SetupFindFirstLine) +BOOL WINAPI SetupFindNextLine( PINFCONTEXT context_in, PINFCONTEXT context_out ); +BOOL WINAPI SetupFindNextMatchLineA( PINFCONTEXT context_in, PCSTR key, PINFCONTEXT context_out ); +BOOL WINAPI SetupFindNextMatchLineW( PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out ); +#define SetupFindNextMatchLine WINELIB_NAME_AW(SetupFindNextMatchLine) +BOOL WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, DWORD size, LPDWORD required ); +DWORD WINAPI SetupGetFieldCount( PINFCONTEXT context ); +BOOL WINAPI SetupGetFileQueueCount( HSPFILEQ, UINT, PUINT ); +BOOL WINAPI SetupGetFileQueueFlags( HSPFILEQ, PDWORD ); +BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result ); +BOOL WINAPI SetupGetLineByIndexA( HINF, PCSTR, DWORD, INFCONTEXT * ); +BOOL WINAPI SetupGetLineByIndexW( HINF, PCWSTR, DWORD, INFCONTEXT * ); +#define SetupGetLineByIndex WINELIB_NAME_AW(SetupGetLineByIndex) +LONG WINAPI SetupGetLineCountA( HINF hinf, PCSTR section ); +LONG WINAPI SetupGetLineCountW( HINF hinf, PCWSTR section ); +#define SetupGetLineCount WINELIB_NAME_AW(SetupGetLineCount) +BOOL WINAPI SetupGetLineTextA( PINFCONTEXT context, HINF hinf, PCSTR section_name,PCSTR key_name, PSTR buffer, DWORD size, PDWORD required ); +BOOL WINAPI SetupGetLineTextW( PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required ); +#define SetupGetLineText WINELIB_NAME_AW(SetupGetLineText) +BOOL WINAPI SetupGetMultiSzFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, LPDWORD required ); +BOOL WINAPI SetupGetMultiSzFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, LPDWORD required ); +#define SetupGetMultiSzField WINELIB_NAME_AW(SetupGetMultiSzField) +BOOL WINAPI SetupGetStringFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, PDWORD required ); +BOOL WINAPI SetupGetStringFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, PDWORD required ); +#define SetupGetStringField WINELIB_NAME_AW(SetupGetStringField) +PVOID WINAPI SetupInitDefaultQueueCallback( HWND ); +PVOID WINAPI SetupInitDefaultQueueCallbackEx( HWND, HWND, UINT, DWORD, PVOID ); BOOL WINAPI SetupInstallFilesFromInfSectionA( HINF, HINF, HSPFILEQ, PCSTR, PCSTR, UINT ); BOOL WINAPI SetupInstallFilesFromInfSectionW( HINF, HINF, HSPFILEQ, PCWSTR, PCWSTR, UINT ); #define SetupInstallFilesFromInfSection WINELIB_NAME_AW(SetupInstallFilesFromInfSection) @@ -806,6 +773,50 @@ BOOL WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UI BOOL WINAPI SetupIterateCabinetA(PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID); BOOL WINAPI SetupIterateCabinetW(PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID); #define SetupIterateCabinet WINELIB_NAME_AW(SetupIterateCabinet) +BOOL WINAPI SetupOpenAppendInfFileA( PCSTR, HINF, UINT * ); +BOOL WINAPI SetupOpenAppendInfFileW( PCWSTR, HINF, UINT * ); +#define SetupOpenAppendInfFile WINELIB_NAME_AW(SetupOpenAppendInfFile) +HSPFILEQ WINAPI SetupOpenFileQueue(void); +HINF WINAPI SetupOpenInfFileA( PCSTR name, PCSTR pszclass, DWORD style, UINT *error ); +HINF WINAPI SetupOpenInfFileW( PCWSTR name, PCWSTR pszclass, DWORD style, UINT *error ); +#define SetupOpenInfFile WINELIB_NAME_AW(SetupOpenInfFile) +HINF WINAPI SetupOpenMasterInf( VOID ); +BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD); +BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD); +#define SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy) +BOOL WINAPI SetupQueueCopyIndirectA( PSP_FILE_COPY_PARAMS_A ); +BOOL WINAPI SetupQueueCopyIndirectW( PSP_FILE_COPY_PARAMS_W ); +#define SetupQueueCopyIndirect WINELIB_NAME_AW(SetupQueueCopyIndirect) +BOOL WINAPI SetupQueueCopySectionA( HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD ); +BOOL WINAPI SetupQueueCopySectionW( HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD ); +#define SetupQueueCopySection WINELIB_NAME_AW(SetupQueueCopySection) +BOOL WINAPI SetupQueueDefaultCopyA( HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD ); +BOOL WINAPI SetupQueueDefaultCopyW( HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD ); +#define SetupQueueDefaultCopy WINELIB_NAME_AW(SetupQueueDefaultCopy) +BOOL WINAPI SetupQueueDeleteA( HSPFILEQ, PCSTR, PCSTR ); +BOOL WINAPI SetupQueueDeleteW( HSPFILEQ, PCWSTR, PCWSTR ); +#define SetupQueueDelete WINELIB_NAME_AW(SetupQueueDelete) +BOOL WINAPI SetupQueueDeleteSectionA( HSPFILEQ, HINF, HINF, PCSTR ); +BOOL WINAPI SetupQueueDeleteSectionW( HSPFILEQ, HINF, HINF, PCWSTR ); +#define SetupQueueDeleteSection WINELIB_NAME_AW(SetupQueueDeleteSection) +BOOL WINAPI SetupQueueRenameA( HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR ); +BOOL WINAPI SetupQueueRenameW( HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR ); +#define SetupQueueRename WINELIB_NAME_AW(SetupQueueRename) +BOOL WINAPI SetupQueueRenameSectionA( HSPFILEQ, HINF, HINF, PCSTR ); +BOOL WINAPI SetupQueueRenameSectionW( HSPFILEQ, HINF, HINF, PCWSTR ); +#define SetupQueueRenameSection WINELIB_NAME_AW(SetupQueueRenameSection) +BOOL WINAPI SetupScanFileQueueA( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD ); +BOOL WINAPI SetupScanFileQueueW( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD ); +#define SetupScanFileQueue WINELIB_NAME_AW(SetupScanFileQueue) +BOOL WINAPI SetupSetDirectoryIdA( HINF, DWORD, PCSTR ); +BOOL WINAPI SetupSetDirectoryIdW( HINF, DWORD, PCWSTR ); +#define SetupSetDirectoryId WINELIB_NAME_AW(SetupSetDirectoryId) +BOOL WINAPI SetupSetFileQueueAlternatePlatformA( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR ); +BOOL WINAPI SetupSetFileQueueAlternatePlatformW( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR ); +#define SetupSetFileQueueAlternatePlatform WINELIB_NAME_AW(SetupSetFileQueueAlternatePlatform) +BOOL WINAPI SetupSetFileQueueFlags( HSPFILEQ, DWORD, DWORD ); +void WINAPI SetupTermDefaultQueueCallback( PVOID ); +PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage); #undef DECL_WINELIB_SETUPAPI_TYPE_AW