能力值:
( LV2,RANK:10 )
|
-
-
2 楼
楼主,能否将 北风网 从C++起步到MFC实战VC++软件工程师高端培训 分享我一份,谢谢啦
这个帖子的: http://bbs.pediy.com/showthread.php?t=187109
我的QQ邮箱是: 2336741536@qq.com
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
那套教程看了看也就删掉了我也没有转存。。。
不过我还是推荐你直接看 WIndow核心编程比较好。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢,再过段时间就开始学习啦,书已经买了,到时间一起看
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
1.完整性级别够么?
2.换EnumProcesses试试
3.先用PROCESS_ALL_ACCESS权限看看行不行然后按MSDN减少权限
4.试下GetProcessImageFileName
5.权限是不是应该是PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
可以参考下
http://www.svnchina.com/svn/taskkill/MainEngine/Win32Project1/Process_Operation.cpp
访问需在www.svnchina.com注册下
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
你确定进程句柄已经打开,或者你当前的进程是否有足够权限
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
1. 足够
2. 没试过
3. 刚开始使用的就是这个权限
4. 可以获取成功
5. 这样子我也试过了还是没法获取到进程路径。
不过已经4。的函数获取到了我也懒得管了。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
两者都确定。
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
分享一个我写的获取进程路径的函数
DWORD WINAPI PsGetImageFileNameW(DWORD dwPid, LPWSTR lpImageFileName, DWORD nSize)
{
HANDLE hProc = NULL;
DWORD dwCopied = 0;
DWORD dwLastError = 0;
do
{
static OSVERSIONINFOW osvi = {sizeof(OSVERSIONINFOW)};
if (osvi.dwMajorVersion == 0)
{
GetVersionExW(&osvi);
}
//
//NT6以上的系统优先使用此方法,32、64、低权限通杀
//
if (osvi.dwMajorVersion >= 6)
{
static lpfnNtQuerySystemInformation NtQuerySystemInformationX = NULL;
if (NtQuerySystemInformationX == NULL)
{
NtQuerySystemInformationX = (lpfnNtQuerySystemInformation)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "NtQuerySystemInformation");
}
PVOID buffer = malloc(0x100);
SYSTEM_PROCESS_IMAGE_NAME_INFORMATION info;
info.ProcessId = (HANDLE)dwPid;
info.ImageName.Length = 0;
info.ImageName.MaximumLength = (USHORT)0x100;
info.ImageName.Buffer = (PWSTR)buffer;
NTSTATUS status = NtQuerySystemInformationX((SYSTEM_INFORMATION_CLASS)88, &info, sizeof(info), NULL);
if (status == 0xC0000004L)
{
free(buffer);
buffer = malloc(info.ImageName.MaximumLength);
info.ImageName.Buffer = (PWSTR)buffer;
status = NtQuerySystemInformationX((SYSTEM_INFORMATION_CLASS)88, &info, sizeof(info), NULL);
}
if (NT_SUCCESS(status))
{
wchar_t devPath[MAX_PATH] = {0};
wcsncpy_s(devPath, MAX_PATH, info.ImageName.Buffer, info.ImageName.Length / 2);
dwCopied = FsDevicePathToFilePathW(devPath, lpImageFileName, nSize);
}
free(buffer);
if (dwCopied > 0)
{
break;
}
}
//
//如果是NT5或者NT6但上述代码执行失败,则用下面这种对权限有要求的方法
//
hProc = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, dwPid);
if (hProc == NULL)
{
dwLastError = GetLastError();
break;
}
dwCopied = GetModuleFileNameExW(hProc, NULL, lpImageFileName, nSize);
if (dwCopied > 0)
{
dwLastError = GetLastError();
break;
}
//兼容64 & 2k
if (dwCopied == 0 && GetLastError() == 299)
{
wchar_t psapi[MAX_PATH];
GetSystemDirectoryW(psapi, MAX_PATH);
PathAppendW(psapi, L"psapi.dll");
HMODULE hMod = LoadLibraryW(psapi);
if (hMod == NULL)
{
dwLastError = GetLastError();
break;
}
typedef DWORD (WINAPI *PGetProcessImageFileNameW)(HANDLE, LPWSTR, DWORD);
PGetProcessImageFileNameW pFun = (PGetProcessImageFileNameW)GetProcAddress(hMod, "GetProcessImageFileNameW");
if (pFun == NULL)
{
dwLastError = GetLastError();
FreeLibrary(hMod);
break;
}
dwCopied = pFun(hProc, lpImageFileName, nSize);
if (dwCopied > 0)
{
dwCopied = FsDevicePathToFilePathW(lpImageFileName, lpImageFileName, nSize);
dwLastError = GetLastError();
}
FreeLibrary(hMod);
}
} while (FALSE);
CloseHandle(hProc);
SetLastError(dwLastError);
return dwCopied;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
..你这个高端了点。用不到。。。
|