NTSTATUS BBHideMemoryEx(IN PHIDE_MEMORYEX pData)
{
NTSTATUS status
=
STATUS_SUCCESS;
PEPROCESS pProcess
=
NULL;
NTSTATUS status1
=
STATUS_SUCCESS;
NTSTATUS status2
=
STATUS_SUCCESS;
status
=
PsLookupProcessByProcessId((HANDLE)pData
-
>pid, &pProcess);
if
(NT_SUCCESS(status))
{
/
/
检查是不是已经保存了PID, pid在游戏的父进程当中保存过来
/
/
下面这个BBIsMemoryProcess,是我项目当中的检查函数.大家无需关心.因为我不想驱动谁给它一个指令都能工作
if
(BBIsMemoryProcess(pData
-
>pid))
{
PMMVAD_SHORT pVadShort1
=
NULL;
PMMVAD_SHORT pVadShort2
=
NULL;
status1
=
BBFindVAD(pProcess, pData
-
>beginAddress, &pVadShort1);
status2
=
BBFindVAD(pProcess, pData
-
>endinAddress, &pVadShort2);
if
(NT_SUCCESS(status1) && NT_SUCCESS(status2))
{
if
(BBHideMemoryProcess(pData
-
>pid, pVadShort1, pVadShort1
-
>StartingVpn))
{
/
/
隐藏内存
pVadShort1
-
>StartingVpn
=
pVadShort2
-
>EndingVpn;
}
else
{
status
=
STATUS_INVALID_PARAMETER;
}
}
else
{
status
=
STATUS_INVALID_PARAMETER;
}
}
}
else
{
DPRINT(
"BlackBone: %s: PsLookupProcessByProcessId failed with status 0x%X\n"
, __FUNCTION__, status);
}
if
(pProcess) {
ObDereferenceObject(pProcess);
}
return
status;
}