代码碎片(1)

1、将进程名字转换为进程ID

// 将进程名字转换为进程ID, 返回非0表示成功,0表示失败
DWORD WINAPI ExeName2PID(LPCTSTR lpszExeName)
{	
	PROCESSENTRY32 pe32;
	pe32.dwSize = sizeof(pe32);
	HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(INVALID_HANDLE_VALUE != hSnapShot)
	{			
		BOOL findResult;
		findResult = Process32First(hSnapShot, &pe32);
		while(findResult)
		{
			if(_tcscmp(pe32.szExeFile, lpszExeName) == 0)
			{
				CloseHandle(hSnapShot);
				return pe32.th32ProcessID;
			}
			findResult = Process32Next(hSnapShot, &pe32);		
		}
	}
	CloseHandle(hSnapShot);
	return 0;
}


2、关闭显示器

SendMessage(FindWindow(0,0), WM_SYSCOMMAND, SC_MONITORPOWER, 1);

3、执行CMD命令,返回输出结果

int CmdEcho(LPCTSTR lpszCmd, CString &strOutput)
{
	SECURITY_ATTRIBUTES sa;
	HANDLE hRead,hWrite;

	sa.nLength = sizeof(SECURITY_ATTRIBUTES);    
	sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符    
	sa.bInheritHandle = TRUE; //创建的进程继承句柄
	if (!CreatePipe(&hRead,&hWrite,&sa,0)) //创建匿名管道
	{     
		return FALSE;
	}

	STARTUPINFO si;    
	PROCESS_INFORMATION pi;

	ZeroMemory(&si,sizeof(STARTUPINFO));
	si.cb = sizeof(STARTUPINFO);    
	GetStartupInfo(&si);    
	si.hStdError = hWrite;    
	si.hStdOutput = hWrite;    //新创建进程的标准输出连在写管道一端
	si.wShowWindow = SW_HIDE; //隐藏窗口    
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

	char cmdline[200]; 
	sprintf(cmdline,"cmd /C %s",lpszCmd);
	if (!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) //创建子进程
	{      
		return FALSE; 
	}

	CloseHandle(hWrite); //关闭管道句柄

	char buffer[4096] = {0};
	DWORD bytesRead;

	while (true) 
	{
		if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) //读取管道
			break;

		strOutput += buffer;
		Sleep(10);
	}
	CloseHandle(hRead);
	return TRUE;
}

4、进程提权

BOOL WINAPI AdjustPrivileges(LPCSTR lpName = SE_DEBUG_NAME, DWORD dwAttrib = SE_PRIVILEGE_ENABLED )
{
	HANDLE hToken;
	TOKEN_PRIVILEGES tkp;
	BOOL bResult=FALSE;
	//打开当前进程信令
	if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
		return bResult;	
	//调整权限
	LookupPrivilegeValue(NULL,lpName,&tkp.Privileges[0].Luid);
	tkp.PrivilegeCount=1;
	tkp.Privileges[0].Attributes = dwAttrib;	
	//通知系统修改权限
	AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
	if(GetLastError() == ERROR_SUCCESS)
		bResult=TRUE;
	return bResult;
}


5、中国公民身份证校验算法,计算身份证最后一位校验值

char GetIdCardChkSum(char* szIdCard)
{
	if (NULL == szIdCard || strlen(szIdCard) < 17)
	{
		return 'E';
	}
	
	
	char szVerifyMap[] = "10X98765432";  // 加权乘积求和除以11的余数所对应的校验数	
	char szFactor[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};  // 加权因子	
	long sum = 0l;  //加权乘积求和	
	int  m = 0;  // 加权乘积求和的模数	
	char *p = szIdCard;  // 当前位置	
	
	while(*p)  // 在 '\0' 之前一直成立		
	{
		
		sum += (*p - '0') * szFactor[p - szIdCard];  // 加权乘积求和		
		p++;  // 当前位置增加1		
	}
	
	
	
	m = sum % 11;  // 取模	
	return  szVerifyMap[m];
}


6、映射文件

LPBYTE MapFile(LPCTSTR szFile, LPDWORD lpSize)
{
	HANDLE hFile;
	hFile = ::CreateFile(szFile,
		GENERIC_READ,
		0,
		NULL,
		OPEN_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,
		NULL				
		);	
	
	if (INVALID_HANDLE_VALUE != hFile)
	{
		DWORD dwFileSize;
		dwFileSize = GetFileSize(hFile, NULL);
		if (NULL != lpSize)
		{
			*lpSize = dwFileSize;
		}
		if (dwFileSize > 0)
		{
			HANDLE hFileMapping;
			hFileMapping = ::CreateFileMapping(hFile, NULL,	PAGE_READONLY, 0, 0, NULL);
			::CloseHandle(hFile);
			if (NULL != hFileMapping)
			{
				LPBYTE pbFile = (PBYTE)::MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
				::CloseHandle(hFileMapping);
				if (NULL != hFileMapping)
				{		
					return pbFile;
					//::UnmapViewOfFile(pbFile);
				}				
			}
		}	
		
	}
	return NULL;
}

void UnmapFile(LPVOID lpFile)
{
	if (NULL != lpFile)
	{
		::UnmapViewOfFile(lpFile);
	}
}

7、获取CPU序列号

CString GetCPUID()
{
	CString strCpuId, strId1, strId2;  
	ULONG   s1, s2;

	__asm
	{
			mov eax, 01h   //eax=1:取CPU序列号
			xor edx, edx
			cpuid
			mov  s1, edx
			mov  s2, eax
	}
	strId1.Format("%08X%08X", s1, s2);

	__asm
	{
			mov eax, 03h
			xor ecx, ecx
			xor edx, edx
			cpuid
			mov  s1, edx
			mov  s2, ecx
	}
	strId2.Format("%08X%08X", s1, s2);

	strCpuId = strId1 + strId2;    
    return strCpuId;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值