add mapping from wmi HRESULT to NTRESULT
This commit is contained in:
		
							parent
							
								
									c6b35167c8
								
							
						
					
					
						commit
						fdc0cf5c1f
					
				@ -1445,7 +1445,11 @@ static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* likely we are 32-bit, pid process is 64-bit */
 | 
			
		||||
    return sigar_proc_args_wmi_get(sigar, pid, procargs);
 | 
			
		||||
    status = sigar_proc_args_wmi_get(sigar, pid, procargs);
 | 
			
		||||
    if (status == ERROR_NOT_FOUND) {
 | 
			
		||||
        status = SIGAR_NO_SUCH_PROCESS;
 | 
			
		||||
    }
 | 
			
		||||
    return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int sigar_os_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
@ -1609,6 +1613,9 @@ SIGAR_DECLARE(int) sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
        /* likely we are 32-bit, pid process is 64-bit */
 | 
			
		||||
        /* procexe->cwd[0] = XXX where else can we try? */
 | 
			
		||||
        status = sigar_proc_exe_wmi_get(sigar, pid, procexe);
 | 
			
		||||
        if (status == ERROR_NOT_FOUND) {
 | 
			
		||||
            status = SIGAR_NO_SUCH_PROCESS;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (procexe->cwd[0] != '\0') {
 | 
			
		||||
 | 
			
		||||
@ -42,15 +42,18 @@ class WMI {
 | 
			
		||||
    HRESULT GetProcStringProperty(DWORD pid, TCHAR *name, TCHAR *value, DWORD len);
 | 
			
		||||
    HRESULT GetProcExecutablePath(DWORD pid, TCHAR *value);
 | 
			
		||||
    HRESULT GetProcCommandLine(DWORD pid, TCHAR *value);
 | 
			
		||||
    int GetLastError();
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    IWbemServices *wbem;
 | 
			
		||||
    HRESULT result;
 | 
			
		||||
    BSTR GetProcQuery(DWORD pid);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
WMI::WMI()
 | 
			
		||||
{
 | 
			
		||||
    wbem = NULL;
 | 
			
		||||
    result = S_OK;
 | 
			
		||||
    CoInitializeEx(NULL, COINIT_MULTITHREADED);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -60,14 +63,31 @@ WMI::~WMI()
 | 
			
		||||
    CoUninitialize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* XXX must be a better way to map HRESULT */
 | 
			
		||||
int WMI::GetLastError()
 | 
			
		||||
{
 | 
			
		||||
    switch (result) {
 | 
			
		||||
      case S_OK:
 | 
			
		||||
        return ERROR_SUCCESS;
 | 
			
		||||
      case WBEM_E_NOT_FOUND:
 | 
			
		||||
        return ERROR_NOT_FOUND;
 | 
			
		||||
      case WBEM_E_ACCESS_DENIED:
 | 
			
		||||
        return ERROR_ACCESS_DENIED;
 | 
			
		||||
      case WBEM_E_NOT_SUPPORTED:
 | 
			
		||||
        return SIGAR_ENOTIMPL;
 | 
			
		||||
      default:
 | 
			
		||||
        return ERROR_INVALID_FUNCTION;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HRESULT WMI::Open(LPCTSTR machine, LPCTSTR user, LPCTSTR pass)
 | 
			
		||||
{
 | 
			
		||||
    HRESULT result;
 | 
			
		||||
    IWbemLocator *locator;
 | 
			
		||||
    wchar_t path[MAX_PATH];
 | 
			
		||||
 | 
			
		||||
    if (wbem) {
 | 
			
		||||
        return S_OK;
 | 
			
		||||
        result = S_OK;
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    result =
 | 
			
		||||
@ -116,6 +136,7 @@ void WMI::Close()
 | 
			
		||||
    if (wbem) {
 | 
			
		||||
        wbem->Release();
 | 
			
		||||
        wbem = NULL;
 | 
			
		||||
        result = S_OK;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -128,7 +149,6 @@ BSTR WMI::GetProcQuery(DWORD pid)
 | 
			
		||||
 | 
			
		||||
HRESULT WMI::GetProcStringProperty(DWORD pid, TCHAR *name, TCHAR *value, DWORD len)
 | 
			
		||||
{
 | 
			
		||||
    HRESULT result;
 | 
			
		||||
    IWbemClassObject *obj;
 | 
			
		||||
    VARIANT var;
 | 
			
		||||
 | 
			
		||||
@ -177,11 +197,11 @@ extern "C" int sigar_proc_args_wmi_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
    WMI *wmi = new WMI();
 | 
			
		||||
 | 
			
		||||
    if (FAILED(wmi->Open())) {
 | 
			
		||||
        return GetLastError();
 | 
			
		||||
        return wmi->GetLastError();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (FAILED(wmi->GetProcCommandLine(pid, buf))) {
 | 
			
		||||
        status = GetLastError();
 | 
			
		||||
        status = wmi->GetLastError();
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        status = sigar_parse_proc_args(sigar, buf, procargs);
 | 
			
		||||
@ -201,13 +221,13 @@ extern "C" int sigar_proc_exe_wmi_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
    WMI *wmi = new WMI();
 | 
			
		||||
 | 
			
		||||
    if (FAILED(wmi->Open())) {
 | 
			
		||||
        return GetLastError();
 | 
			
		||||
        return wmi->GetLastError();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    procexe->name[0] = '\0';
 | 
			
		||||
 | 
			
		||||
    if (FAILED(wmi->GetProcExecutablePath(pid, buf))) {
 | 
			
		||||
        status = GetLastError();
 | 
			
		||||
        status = wmi->GetLastError();
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        status = SIGAR_OK;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user