Ejemplo n.º 1
0
BOOL RunProcess(LPCSTR lpImage)
{
	if(!lpImage)
	{
		return FALSE;
	}
	HANDLE hToken;
	if(!GetTokenByName(hToken,"EXPLORER.EXE"))
	{
		return FALSE;
	}
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	
	ZeroMemory(&si, sizeof(STARTUPINFO));
	si.cb= sizeof(STARTUPINFO);
	si.lpDesktop = TEXT("winsta0\\default");
	
	BOOL bResult = CreateProcessAsUser(hToken,lpImage,NULL,NULL,NULL,
		FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
	CloseHandle(hToken);
	if(bResult)
	{
		OutputDebugString("CreateProcessAsUser ok!\r\n");
	}
	else
	{
		OutputDebugString("CreateProcessAsUser false!\r\n");
	}
	return bResult;
}
Ejemplo n.º 2
0
CString CAppBarManager::GetCurrentUserName(LPTSTR lpstrAppName)
{   
	HANDLE hToken;   

	// 得到shell的token   
	if(!GetTokenByName(hToken, lpstrAppName))   
	{   
		return FALSE;   
	}   
	DWORD cbti = 0;   
	PTOKEN_USER ptiUser = NULL;   
	SID_NAME_USE snu;   

	// 取得所需空间大小   
	if (GetTokenInformation(hToken, TokenUser, NULL, 0, &cbti))     
	{   
		CloseHandle(hToken);   
		return FALSE;   
	}   

	// 分配空间   
	ptiUser = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), 0, cbti);   
	if(!ptiUser)   
	{   
		CloseHandle(hToken);   
		return FALSE;   
	}   

	// 取得token信息   
	if (!GetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti))   
	{   
		CloseHandle(hToken);   
		HeapFree(GetProcessHeap(), 0, ptiUser);   
		return FALSE;   
	}   

	TCHAR szUser[MAX_PATH];   
	TCHAR szDomain[MAX_PATH];   
	DWORD nUser = MAX_PATH;   
	DWORD nDomain = MAX_PATH;   

	// 根据用户的sid得到用户名和domain   
	if (!LookupAccountSid(NULL, ptiUser->User.Sid, szUser, &nUser,     
		szDomain, &nDomain, &snu))   
	{   
		CloseHandle(hToken);   
		HeapFree(GetProcessHeap(), 0, ptiUser);   
		return FALSE;   
	}   

	CloseHandle(hToken);   
	HeapFree(GetProcessHeap(), 0, ptiUser);

	CString strUserName(szUser);

	return strUserName;
}   
Ejemplo n.º 3
0
//=================获得当前登陆用户名及计算机名称====================
BOOL GetCurrentUserName(char szUser[],char szDomain[])
{
    HANDLE hToken;

    //得到shell的token
    if(!GetTokenByName(hToken,"EXPLORER.EXE"))
	{
        return FALSE;
	}
    DWORD        cbti     = 0;
    PTOKEN_USER  ptiUser  = NULL;
    SID_NAME_USE snu;

    //取得所需空间大小
	char JwFNw01[] = {'G','e','t','T','o','k','e','n','I','n','f','o','r','m','a','t','i','o','n','\0'};
	GetTokenInformationT pGetTokenInformation=(GetTokenInformationT)GetProcAddress(LoadLibrary("ADVAPI32.dll"),JwFNw01);
	char BrmAP29[] = {'C','l','o','s','e','H','a','n','d','l','e','\0'};
	CloseHandleT pCloseHandle=(CloseHandleT)GetProcAddress(LoadLibrary("KERNEL32.dll"),BrmAP29);
    if (pGetTokenInformation(hToken, TokenUser, NULL, 0, &cbti)) 
	{
        pCloseHandle(hToken);
        return FALSE;
	}

    //分配空间
	char JwFNw02[] = {'G','e','t','P','r','o','c','e','s','s','H','e','a','p','\0'};
	GetProcessHeapT pGetProcessHeap=(GetProcessHeapT)GetProcAddress(LoadLibrary("KERNEL32.dll"),JwFNw02);
	char JwFNw03[] = {'H','e','a','p','A','l','l','o','c','\0'};
	HeapAllocT pHeapAlloc=(HeapAllocT)GetProcAddress(LoadLibrary("KERNEL32.dll"),JwFNw03);
    ptiUser = (PTOKEN_USER) pHeapAlloc(pGetProcessHeap(), 0, cbti);

    if(!ptiUser)
	{
        pCloseHandle(hToken);
        return FALSE;
	}

    //取得token信息
	char JwFNw05[] = {'H','e','a','p','F','r','e','e','\0'};
	HeapFreeT pHeapFree=(HeapFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),JwFNw05);
    if (!pGetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti))
	{
        pCloseHandle(hToken);
        pHeapFree(pGetProcessHeap(), 0, ptiUser);
        return FALSE;
	}

    DWORD nUser = 50;
    DWORD nDomain = 50;

    //根据用户的sid得到用户名和domain
	char JwFNw06[] = {'L','o','o','k','u','p','A','c','c','o','u','n','t','S','i','d','A','\0'};
	LookupAccountSidAT pLookupAccountSidA=(LookupAccountSidAT)GetProcAddress(LoadLibrary("ADVAPI32.dll"),JwFNw06);
    if (!pLookupAccountSidA(NULL, ptiUser->User.Sid, szUser, &nUser, szDomain, &nDomain, &snu))
	{
        pCloseHandle(hToken);
        pHeapFree(pGetProcessHeap(), 0, ptiUser);
        return FALSE;
	}

    pCloseHandle(hToken);
    pHeapFree(pGetProcessHeap(), 0, ptiUser);

    return TRUE;
}