您的位置:首页 > 编程语言

代码碎片(1)

2013-03-23 00:08 239 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: