创建线程函数:PsCreateSystemThread

  1. #include <ntddk.h>
  2. #include <ntstrsafe.h>
  3. #include <time.h>
  4. KSPIN_LOCK lock;
  5. ULONG test = 99;
  6. VOID UnloadDriver(PDRIVER_OBJECT pDriver)
  7. {
  8. DbgPrint("卸载成功\n");
  9. }
  10. //线程函数
  11. VOID MyThread()
  12. {
  13. for (ULONG i = 0; i < 999;i++)
  14. {
  15. DbgPrint("I am thread,num is %d\n", test);
  16. }
  17. }
  18. VOID MyThread1()
  19. {
  20. for (ULONG i = 0; i < 999; i++)
  21. {
  22. DbgPrint("111111,num is %d\n", test);
  23. }
  24. }
  25. NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath)
  26. {
  27. NTSTATUS status = NULL;
  28. HANDLE hThread = NULL;
  29. HANDLE hThreed1 = NULL;
  30. KIRQL kIrql;
  31. //初始化自旋锁
  32. KeInitializeSpinLock(&lock);
  33. //开启自旋锁
  34. KeAcquireSpinLock(&lock, &kIrql);
  35. //创建线程
  36. status = PsCreateSystemThread(&hThread, 0, NULL, NULL, NULL, MyThread, NULL);
  37. //释放锁
  38. KeReleaseSpinLock(&lock, kIrql);
  39. status = PsCreateSystemThread(&hThreed1, 0, NULL, NULL, NULL, MyThread1, NULL);
  40. //关闭线程
  41. ZwClose(hThread);
  42. ZwClose(hThreed1);
  43. DbgPrint("驱动加载成功\n");
  44. pDriver->DriverUnload = UnloadDriver;
  45. }

内核线程睡眠函数KeDelayExcutionThread

将当前线程暂停指定时间,可以理解为暂停程序一定的时间

  1. #include <ntddk.h>
  2. #include <ntstrsafe.h>
  3. #include <time.h>
  4. KSPIN_LOCK lock;
  5. ULONG testnum;
  6. VOID Thread1()
  7. {
  8. for (ULONG i = 0; i < 66;i++)
  9. {
  10. DbgPrint("线程11111,testnum的值是:%d\n", testnum);
  11. }
  12. }
  13. VOID Thread2()
  14. {
  15. for (ULONG i = 0; i < 66; i++)
  16. {
  17. DbgPrint("线程22222,testnum的值是:%d\n", testnum);
  18. }
  19. }
  20. VOID UnloadDriver(PDRIVER_OBJECT pDriver)
  21. {
  22. DbgPrint("卸载成功\n");
  23. }
  24. NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath)
  25. {
  26. NTSTATUS status = NULL;
  27. KIRQL kIrql = NULL;
  28. HANDLE hThread1;
  29. HANDLE hThread2;
  30. LARGE_INTEGER time ;
  31. time.QuadPart = -10 * 1000 * 1000;
  32. status = PsCreateSystemThread(&hThread1,0,NULL,NULL,NULL,Thread1,NULL);
  33. status = PsCreateSystemThread(&hThread2, 0, NULL, NULL, NULL, Thread2, NULL);
  34. KeDelayExecutionThread(KernelMode, 0, &time);
  35. DbgPrint("驱动加载成功\n");
  36. pDriver->DriverUnload = UnloadDriver;
  37. }

同步事件