// Copyright (C) Anders Kjersem. Licensed under the zlib/libpng license, see License.txt for details. #include "util.h" void WINAPI MemSet(void*pMem,SIZE_T cb,BYTE set) { char *p=(char*)pMem; while (cb-- > 0){*p++=set;} // return pMem; } void WINAPI ___MemZero(void*pMem,SIZE_T cb) { MemSet(pMem,cb,0); } void WINAPI MemCopy(void*pD,void*pS,SIZE_T cb) { for(SIZE_T i=0;i= _T('0') && c <= _T('9')) c-='0'; else if (base==16 && (c & ~0x20) >= 'A' && (c & ~0x20) <= 'F') c=(c & 7) +9; else { if (pFoundBadChar /*&& c!=' '*/)*pFoundBadChar=true; break; } v*=base;v+=c; } return v; } BOOL EnablePrivilege(LPCTSTR pszPrivilege,BOOL Enable,BOOL *pWasEnabled) { BOOL ret=FALSE; HANDLE hToken=NULL; if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) { TOKEN_PRIVILEGES tkp; DWORD cbio=sizeof tkp,ec=0; if(LookupPrivilegeValue(NULL,pszPrivilege,&tkp.Privileges[0].Luid)) { tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = Enable?SE_PRIVILEGE_ENABLED:0; ret=AdjustTokenPrivileges(hToken,false,&tkp,sizeof tkp,&tkp,&cbio); if (ret && GetLastError()==ERROR_NOT_ALL_ASSIGNED)ret=false; if (pWasEnabled)*pWasEnabled=tkp.Privileges[0].Attributes & SE_PRIVILEGE_ENABLED; } CloseHandle(hToken); //if (ec)SetLastError(ec); } return ret; } typedef DWORD (WINAPI*SHGETVALUEA)(HKEY hKey,LPCSTR pszSubKey,LPCSTR pszValue,DWORD*pdwType,void*pvData,DWORD*pcbData); extern SHGETVALUEA _SHGetValueA; void UAC_DbgHlpr_LoadPasswordInRunAs(HWND hDlg) { TCHAR buf[MAX_PATH]; DWORD type,size=sizeof(buf); ASSERT(_SHGetValueA); if (_SHGetValueA && ERROR_SUCCESS==_SHGetValueA(HKEY_CURRENT_USER,("software"),("NSIS_UAC_Dbg_AdminPwd"),&type,buf,&size)) { SndDlgItemMsg(GetDlgItem(hDlg,0x105),0x3ED,WM_SETTEXT,0,(LPARAM)buf); } } #if (0 DBGONLY(+1)) extern "C" void __declspec(dllexport) __cdecl _DbgBox(HWND hwndNSIS) { TCHAR buf[999]; wsprintf(buf, "IsInnerInstance=%d IsOuterInstance=%d\n" "(thisExport:)hwndNSIS=%X\n" ,IsInnerInstance(),IsOuterInstance() ,hwndNSIS ); MessageBox(hwndNSIS,buf,"NSIS:UAC:DBG",MB_SYSTEMMODAL); } #endif