Ok I see, thanks for posting the headers. :)
This code is clearly overcomplicating things, actually its only 1 class needed, rather than 3.
Lets call it "Process":
class Process
{
public:
Process(std::wstring executable_name_, std::wstring command_line_);
~Process(void);
void StartProcess();
private:
void CreateProcessAsActiveSession();
bool GetActoveConsoleSessionId(DWORD& session_id);
private:
std::wstring executable_name_;
std::wstring command_line_;
};
The member-function "StartProcess" belongs into this class, because all it needs in terms of data, is here.
You see it has all the functionality, as the 3 classes, but it encapsulates the data and the functions that operate on that data in 1 place. That is what is meant by "Encapsulation" in terms of OO-Programming.
Plus it has a cleaner interface and is easier to use.
Maybe it makes it clearer, if you think about adding new functionalities, like KillProcess and others, they all belong into this class. Keep the data and the functions that operate on that data together in 1 place.