summaryrefslogtreecommitdiff
path: root/network/trans/WFPSampler/lib/HelperFunctions_Process.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'network/trans/WFPSampler/lib/HelperFunctions_Process.cpp')
-rw-r--r--network/trans/WFPSampler/lib/HelperFunctions_Process.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/network/trans/WFPSampler/lib/HelperFunctions_Process.cpp b/network/trans/WFPSampler/lib/HelperFunctions_Process.cpp
new file mode 100644
index 00000000..6124ab40
--- /dev/null
+++ b/network/trans/WFPSampler/lib/HelperFunctions_Process.cpp
@@ -0,0 +1,196 @@
+////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) 2012 Microsoft Corporation. All Rights Reserved.
+//
+// Module Name:
+// HelperFunctions_Process.cpp
+//
+// Abstract:
+// This module contains functions which assist actions pertaining to processes.
+//
+// Naming Convention:
+//
+// <Scope><Module><Object><Action><Modifier>
+//
+// i.e.
+//
+// <Scope>
+// {
+// - Function is likely visible to other modules
+// Prv - Function is private to this module.
+// }
+// <Module>
+// {
+// Hlpr - Function is from HelperFunctions_* Modules.
+// }
+// <Object>
+// {
+// Process - Function pertains to processes.
+// }
+// <Action>
+// {
+// Get - Function retrieves data.
+// }
+// <Modifier>
+// {
+// State - Funstion acts on the object's state.
+// String - Function acts on a null terminated wide character string.
+// }
+//
+// Private Functions:
+//
+// Public Functions:
+// HlprProcessGetID(),
+//
+// Author:
+// Dusty Harper (DHarper)
+//
+// Revision History:
+//
+// [ Month ][Day] [Year] - [Revision]-[ Comments ]
+// May 01, 2010 - 1.0 - Creation
+//
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "HelperFunctions_Include.h" /// .
+
+/**
+ @helper_function="PrvHlprServiceQueryState"
+
+ Purpose: Return the state of the service. <br>
+ <br>
+ Notes: <br>
+ <br>
+
+*/
+
+/**
+ @helper_function="HlprServiceStop"
+
+ Purpose: Issue a stop control to the specified service. <br>
+ <br>
+ Notes: <br>
+ <br>
+ MSDN_Ref: HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS682489.aspx <br>
+ HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS684834.aspx <br>
+ HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS684836.aspx <br>
+ HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS684320.aspx <br>
+ HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS684218.aspx <br>
+ HTTP://MSDN.Microsoft.com/En-US/Library/Windows/Desktop/MS684221.aspx <br>
+*/
+_Success_(return == NO_ERROR)
+UINT32 HlprProcessGetID(_In_ PCWSTR pProcessName,
+ _Inout_ UINT32* pPID)
+{
+ ASSERT(pProcessName);
+ ASSERT(pPID);
+
+ UINT32 status = NO_ERROR;
+ HANDLE processSnapshotHandle = 0;
+ PROCESSENTRY32 processEntry = {0};
+
+ processEntry.dwSize = sizeof(PROCESSENTRY32);
+
+ processSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,
+ 0);
+ if(processSnapshotHandle == INVALID_HANDLE_VALUE)
+ {
+ status = GetLastError();
+
+ HlprLogError(L"HlprProcessGetID : CreateToolhelp32Snapshot() [status: %#x]",
+ status);
+
+ HLPR_BAIL;
+ }
+
+ if(!Process32First(processSnapshotHandle,
+ &processEntry))
+ {
+ status = GetLastError();
+
+ HlprLogError(L"HlprProcessGetID : Process32First() [status: %#x]",
+ status);
+
+ HLPR_BAIL;
+ }
+
+ for(;
+ *pPID == 0;
+ )
+ {
+ HANDLE processHandle = 0;
+ HANDLE moduleSnapshotHandle = 0;
+ MODULEENTRY32 moduleEntry = {0};
+
+ moduleEntry.dwSize = sizeof(MODULEENTRY32);
+
+ processHandle = OpenProcess(PROCESS_QUERY_INFORMATION |
+ PROCESS_VM_READ,
+ FALSE,
+ processEntry.th32ProcessID);
+ if(processHandle == 0)
+ {
+ status = GetLastError();
+
+ /// Don't log errors for the Idle, CSRSS, & System processes
+ if(status != ERROR_ACCESS_DENIED &&
+ status != ERROR_INVALID_PARAMETER)
+ HlprLogError(L"HlprProcessGetID : OpenProcess() [status: %#x]",
+ status);
+
+ HLPR_BAIL_2;
+ }
+
+ moduleSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
+ processEntry.th32ProcessID);
+ if(moduleSnapshotHandle == INVALID_HANDLE_VALUE)
+ {
+ status = GetLastError();
+
+ HlprLogError(L"HlprProcessGetID : CreateToolhelp32Snapshot() [status: %#x]",
+ status);
+
+ HLPR_BAIL_2;
+ }
+
+ if(!Module32First(moduleSnapshotHandle,
+ &moduleEntry))
+ {
+ status = GetLastError();
+
+ HlprLogError(L"HlprProcessGetID : Module32First() [status: %#x]",
+ status);
+
+ HLPR_BAIL_2;
+ }
+
+ for(;
+ *pPID == 0;
+ )
+ {
+ if(HlprStringsAreEqual(pProcessName,
+ moduleEntry.szModule))
+ *pPID = processEntry.th32ProcessID;
+
+ if(!Module32Next(moduleSnapshotHandle,
+ &moduleEntry))
+ break;
+ }
+
+ HLPR_BAIL_LABEL_2:
+
+ HLPR_CLOSE_HANDLE(processHandle);
+
+ if(!Process32Next(processSnapshotHandle,
+ &processEntry))
+ break;
+ }
+
+ HLPR_BAIL_LABEL:
+
+ HLPR_CLOSE_HANDLE(processSnapshotHandle);
+
+ ASSERT(*pPID);
+
+ return status;
+}