/****************************************************************************** * LookupPrivilegeValueA [ADVAPI32.@] */ BOOL WINAPI LookupPrivilegeValueA( LPCSTR lpSystemName, LPCSTR lpName, PLUID lpLuid ) { LPWSTR lpSystemNameW = HEAP_strdupAtoW(GetProcessHeap(), 0, lpSystemName); LPWSTR lpNameW = HEAP_strdupAtoW(GetProcessHeap(), 0, lpName); BOOL ret; TRACE ("(%s, %s, %p)\n", lpSystemName, lpName, lpLuid); ret = LookupPrivilegeValueW( lpSystemNameW, lpNameW, lpLuid); HeapFree(GetProcessHeap(), 0, lpNameW); HeapFree(GetProcessHeap(), 0, lpSystemNameW); return ret; }
/********************************************************************** * PE_EnumResourceNames32A */ WIN_BOOL PE_EnumResourceLanguagesA( HMODULE hmod,LPCSTR name,LPCSTR type,ENUMRESLANGPROCA lpfun, LONG lparam ) { PE_MODREF *pem = HMODULE32toPE_MODREF(hmod); int i; PIMAGE_RESOURCE_DIRECTORY resdir; PIMAGE_RESOURCE_DIRECTORY_ENTRY et; WIN_BOOL ret; HANDLE heap = GetProcessHeap(); LPWSTR nameW,typeW; if (!pem || !pem->pe_resource) return FALSE; resdir = (PIMAGE_RESOURCE_DIRECTORY)pem->pe_resource; if (HIWORD(name)) nameW = HEAP_strdupAtoW(heap,0,name); else nameW = (LPWSTR)name; resdir = GetResDirEntryW(resdir,nameW,(DWORD)pem->pe_resource,FALSE); if (HIWORD(nameW)) HeapFree(heap,0,nameW); if (!resdir) return FALSE; if (HIWORD(type)) typeW = HEAP_strdupAtoW(heap,0,type); else typeW = (LPWSTR)type; resdir = GetResDirEntryW(resdir,typeW,(DWORD)pem->pe_resource,FALSE); if (HIWORD(typeW)) HeapFree(heap,0,typeW); if (!resdir) return FALSE; et =(PIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)resdir+sizeof(IMAGE_RESOURCE_DIRECTORY)); ret = FALSE; for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) { /* languages are just ids... I hopem */ ret = lpfun(hmod,name,type,et[i].u1.Id,lparam); if (!ret) break; } return ret; }
/****************************************************************************** * LsaQueryInformationPolicy [ADVAPI32.@] */ NTSTATUS WINAPI LsaQueryInformationPolicy( IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, OUT PVOID *Buffer) { FIXME("(%p,0x%08x,%p):stub\n", PolicyHandle, InformationClass, Buffer); if(!Buffer) return FALSE; switch (InformationClass) { case PolicyAuditEventsInformation: /* 2 */ { PPOLICY_AUDIT_EVENTS_INFO p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(POLICY_AUDIT_EVENTS_INFO)); p->AuditingMode = FALSE; /* no auditing */ *Buffer = p; } break; case PolicyPrimaryDomainInformation: /* 3 */ case PolicyAccountDomainInformation: /* 5 */ { struct di { POLICY_PRIMARY_DOMAIN_INFO ppdi; SID sid; }; SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY}; struct di * xdi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(xdi)); RtlInitUnicodeString(&(xdi->ppdi.Name), HEAP_strdupAtoW(GetProcessHeap(),0,"DOMAIN")); xdi->ppdi.Sid = &(xdi->sid); xdi->sid.Revision = SID_REVISION; xdi->sid.SubAuthorityCount = 1; xdi->sid.IdentifierAuthority = localSidAuthority; xdi->sid.SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID; *Buffer = xdi; } break; case PolicyAuditLogInformation: case PolicyPdAccountInformation: case PolicyLsaServerRoleInformation: case PolicyReplicaSourceInformation: case PolicyDefaultQuotaInformation: case PolicyModificationInformation: case PolicyAuditFullSetInformation: case PolicyAuditFullQueryInformation: case PolicyDnsDomainInformation: { FIXME("category not implemented\n"); return FALSE; } } return TRUE; }
/********************************************************************** * GetResDirEntryA */ PIMAGE_RESOURCE_DIRECTORY GetResDirEntryA( PIMAGE_RESOURCE_DIRECTORY resdirptr, LPCSTR name, DWORD root, WIN_BOOL allowdefault ) { PIMAGE_RESOURCE_DIRECTORY retv; LPWSTR nameW = HIWORD(name)? HEAP_strdupAtoW( GetProcessHeap(), 0, name ) : (LPWSTR)name; retv = GetResDirEntryW( resdirptr, nameW, root, allowdefault ); if ( HIWORD(name) ) HeapFree( GetProcessHeap(), 0, nameW ); return retv; }
/********************************************************************** * PE_EnumResourceNames32A */ WIN_BOOL PE_EnumResourceNamesA (HMODULE hmod, LPCSTR type, ENUMRESNAMEPROCA lpfun, LONG lparam) { PE_MODREF *pem = HMODULE32toPE_MODREF (hmod); int i; PIMAGE_RESOURCE_DIRECTORY resdir; PIMAGE_RESOURCE_DIRECTORY_ENTRY et; WIN_BOOL ret; HANDLE heap = GetProcessHeap (); LPWSTR typeW; if (!pem || !pem->pe_resource) return FALSE; resdir = (PIMAGE_RESOURCE_DIRECTORY) pem->pe_resource; if (HIWORD (type)) typeW = HEAP_strdupAtoW (heap, 0, type); else typeW = (LPWSTR) type; resdir = GetResDirEntryW (resdir, typeW, (DWORD) pem->pe_resource, FALSE); if (HIWORD (type)) HeapFree (heap, 0, typeW); if (!resdir) return FALSE; et = (PIMAGE_RESOURCE_DIRECTORY_ENTRY) ((LPBYTE) resdir + sizeof (IMAGE_RESOURCE_DIRECTORY)); ret = FALSE; for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++) { LPSTR name; if (et[i].u1.s.NameIsString) name = HEAP_strdupWtoA (heap, 0, (LPWSTR) ((LPBYTE) pem->pe_resource + et[i].u1.s.NameOffset)); else name = (LPSTR) (int) et[i].u1.Id; ret = lpfun (hmod, type, name, lparam); if (HIWORD (name)) HeapFree (heap, 0, name); if (!ret) break; } return ret; }
/************************************************************************* * LookupPrivilegeNameA [ADVAPI32.@] */ BOOL WINAPI LookupPrivilegeNameA (LPCSTR lpSystemName, PLUID lpLuid, LPSTR lpName, LPDWORD cchName) { LPWSTR lpSystemNameW = HEAP_strdupAtoW (GetProcessHeap (), 0, lpSystemName); LPWSTR lpNameW = NULL; BOOL Ret; TRACE ("(%s, %p, %p, %p)\n", lpSystemName, lpLuid, lpName, cchName); if (*cchName) lpNameW = HeapAlloc (GetProcessHeap (), 0, *cchName * sizeof (WCHAR)); Ret = LookupPrivilegeNameW (lpSystemNameW, lpLuid, lpNameW, cchName); if (Ret) WideCharToMultiByte (CP_ACP, 0, lpNameW, -1, lpName, *cchName, NULL, NULL); if (lpNameW) HeapFree (GetProcessHeap (), 0, lpNameW); HeapFree (GetProcessHeap (), 0, lpSystemNameW); return Ret; }
/* Create Unicode upper-cased copy */ static WCHAR *RES_GetUnicodeName (LPCSTR pName, BOOL bUnicode) { LPWSTR pNameW; unsigned int i, Len; if (!bUnicode) { pNameW = HEAP_strdupAtoW (GetProcessHeap (), 0, pName); if (!pNameW) { ERR ("Out of memory!\n"); return NULL; } Len = strlenW (pNameW); } else { Len = strlenW ((LPWSTR)pName); pNameW = HeapAlloc (GetProcessHeap (), 0, (Len + 1) * sizeof (WCHAR)); if (!pNameW) { ERR ("Out of memory!\n"); return NULL; } memcpy (pNameW, pName, (Len + 1) * sizeof (WCHAR)); } for (i = 0; i < Len; i++) pNameW[i] = toupperW (pNameW[i]); pNameW[Len] = 0; return pNameW; }