Pegando o ID,Login e Dominio

Publicado: 20 de dezembro de 2013 em C/C++, Programação, Win, Windows, Windows, Windows 7, Windows XP
Tags:, , , , , , , ,

Fala pessoal,

Essa semana aprendi algo novo, estudando e pesquisando cheguei neste blog aqui e atendeu quase 100% do que eu precisava, fiz algumas alterações e estou disponibilizando.

Ele pega o ID da sessão, o Login e do Domínio em que a maquina está. Ultimamente estou trabalhando focado em Windows mas pretendo voltar o mais rápido possível para o Linux.

#include <windows.h>
#include <vector>
#include <string>
#include <WtsApi32.h>
#include <tchar.h>
#pragma comment(lib, "WtsApi32.lib")

//
typedef std::basic_string<TCHAR> tstring;


// Get current sessions
bool EnumSessionIds(std::vector<DWORD>& list)
{
list.clear();
WTS_SESSION_INFO *pSI = NULL;
DWORD dwSICount;

BOOL bRes = WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSI, &dwSICount);
if (bRes == 0)
return false;

for (unsigned int i = 0; i < dwSICount; ++i)
{
list.push_back(pSI[i].SessionId);
}

WTSFreeMemory(pSI);

return true;
}

// Get username from session id
bool GetSessionUserName(DWORD dwSessionId, tstring& username)
{
LPTSTR pBuffer = NULL;
DWORD dwBufferLen;

BOOL bRes = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionId, WTSUserName, &pBuffer, &dwBufferLen);

if (bRes == FALSE)
return false;

username = pBuffer;

WTSFreeMemory(pBuffer);

return true;
}

// Get domain name from session id
bool GetSessionDomain(DWORD dwSessionId, tstring& domain)
{
LPTSTR pBuffer = NULL;
DWORD dwBufferLen;

BOOL bRes = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionId, WTSDomainName, &pBuffer, &dwBufferLen);

if (bRes == FALSE)
return false;

domain = pBuffer;

WTSFreeMemory(pBuffer);

return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
std::vector<DWORD> sessionIds;
bool bRes = EnumSessionIds(sessionIds);
if (!bRes)
{
// error
return 0;
}

// enum sessions
std::vector<DWORD>::iterator iter;
for (iter = sessionIds.begin(); iter != sessionIds.end(); iter++)
{
tstring domain;
tstring username;
GetSessionUserName(*iter, username);
GetSessionDomain(*iter, domain);


if(username != _T("") || domain != _T(""))
_tprintf(_T("Session ID = %lu\nUserName   = %s\nDomain     = %s\n"),*iter, username.c_str(),domain.c_str());

}

system ("PAUSE");
return 0;
}

Abraços!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s