Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.0 KiB

4 years ago
  1. // utxcpt1.c - user mode structured exception handling test 1
  2. #include <ntos.h>
  3. main()
  4. {
  5. LONG i, j;
  6. PULONG p4, p3, p2, p1;
  7. ULONG Size1, Size2, Size3;
  8. NTSTATUS status;
  9. HANDLE CurrentProcessHandle;
  10. MEMORY_BASIC_INFORMATION MemInfo;
  11. ULONG OldProtect;
  12. STRING Name3;
  13. HANDLE Section1;
  14. OBJECT_ATTRIBUTES ObjectAttributes;
  15. ULONG ViewSize, Offset;
  16. CurrentProcessHandle = NtCurrentProcess();
  17. for(i=0;i<3;i++){
  18. DbgPrint("Hello World...\n\n");
  19. }
  20. DbgPrint("allocating virtual memory\n");
  21. p1 = (PULONG)NULL;
  22. Size1 = 5*4096;
  23. status = NtAllocateVirtualMemory (CurrentProcessHandle, (PVOID)&p1,
  24. 0, &Size1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
  25. DbgPrint("created vm status %X start %lx size %lx\n",
  26. status, (ULONG)p1, Size1);
  27. p2 = p1;
  28. *p2 = 99;
  29. Size2 = 4;
  30. status = NtProtectVirtualMemory (CurrentProcessHandle, (PVOID)&p2,
  31. &Size2, PAGE_GUARD | PAGE_READONLY, &OldProtect);
  32. DbgPrint("protected VM status %X, base %lx, size %lx, old protect %lx\n",
  33. status, p2, Size2, OldProtect);
  34. p3 = p1 + 1024;
  35. *p3 =91;
  36. Size2 = 4;
  37. status = NtProtectVirtualMemory (CurrentProcessHandle, (PVOID)&p3,
  38. &Size2, PAGE_NOACCESS, &OldProtect);
  39. DbgPrint("protected VM status %X, base %lx, size %lx, old protect %lx\n",
  40. status, p3, Size2, OldProtect);
  41. try {
  42. *p2 = 94;
  43. } except (EXCEPTION_EXECUTE_HANDLER) {
  44. status = GetExceptionCode();
  45. DbgPrint("got an exception of %X\n",status);
  46. }
  47. try {
  48. i = *p2;
  49. } except (EXCEPTION_EXECUTE_HANDLER) {
  50. status = GetExceptionCode();
  51. DbgPrint("got an exception of %X\n",status);
  52. }
  53. DbgPrint("value of p2 should be 94 is %ld\n",*p2);
  54. try {
  55. *p3 = 94;
  56. } except (EXCEPTION_EXECUTE_HANDLER) {
  57. status = GetExceptionCode();
  58. DbgPrint("got an exception of %X\n",status);
  59. }
  60. return 0;
  61. }