1 #include <stdio.h> 2 #include <string.h> 3 #define WIN32_NO_STATUS 4 #include <windows.h> 5 #define NTOS_MODE_USER 6 #include <ndk/ntndk.h> 7 8 #define BUFFER_SIZE 256 9 10 int main(int argc, char* argv[]) 11 { 12 PRTL_ATOM_TABLE AtomTable = NULL; 13 RTL_ATOM AtomA = -1, AtomB = -1, AtomC = -1; 14 NTSTATUS Status; 15 WCHAR Buffer[BUFFER_SIZE]; 16 ULONG NameLength, Data1, Data2; 17 18 printf("Atom table test app\n\n"); 19 20 printf("RtlCreateAtomTable()\n"); 21 Status = RtlCreateAtomTable(37, 22 &AtomTable); 23 printf(" Status 0x%08lx\n", Status); 24 25 if (NT_SUCCESS(Status)) 26 { 27 printf(" AtomTable %p\n", AtomTable); 28 29 printf("RtlAddAtomToAtomTable()\n"); 30 Status = RtlAddAtomToAtomTable(AtomTable, 31 L"TestAtomA", 32 &AtomA); 33 printf(" Status 0x%08lx\n", Status); 34 if (NT_SUCCESS(Status)) 35 { 36 printf(" AtomA 0x%x\n", AtomA); 37 } 38 39 printf("RtlAddAtomToAtomTable()\n"); 40 Status = RtlAddAtomToAtomTable(AtomTable, 41 L"TestAtomB", 42 &AtomB); 43 printf(" Status 0x%08lx\n", Status); 44 if (NT_SUCCESS(Status)) 45 { 46 printf(" AtomB 0x%x\n", AtomB); 47 } 48 49 50 printf("RtlLookupAtomInAtomTable()\n"); 51 Status = RtlLookupAtomInAtomTable(AtomTable, 52 L"TestAtomA", 53 &AtomC); 54 printf(" Status 0x%08lx\n", Status); 55 if (NT_SUCCESS(Status)) 56 { 57 printf(" AtomC 0x%x\n", AtomC); 58 } 59 60 61 printf("RtlPinAtomInAtomTable()\n"); 62 Status = RtlPinAtomInAtomTable(AtomTable, 63 AtomC); 64 printf(" Status 0x%08lx\n", Status); 65 66 printf("RtlPinAtomInAtomTable()\n"); 67 Status = RtlPinAtomInAtomTable(AtomTable, 68 AtomC); 69 printf(" Status 0x%08lx\n", Status); 70 71 72 // printf("RtlDeleteAtomFromAtomTable()\n"); 73 // Status = RtlDeleteAtomFromAtomTable(AtomTable, 74 // AtomC); 75 // printf(" Status 0x%08lx\n", Status); 76 77 78 // printf("RtlEmptyAtomTable()\n"); 79 // Status = RtlEmptyAtomTable(AtomTable, 80 // TRUE); 81 // printf(" Status 0x%08lx\n", Status); 82 83 84 // printf("RtlLookupAtomInAtomTable()\n"); 85 // Status = RtlLookupAtomInAtomTable(AtomTable, 86 // L"TestAtomA", 87 // &AtomC); 88 // printf(" Status 0x%08lx\n", Status); 89 90 91 printf("RtlQueryAtomInAtomTable()\n"); 92 NameLength = sizeof(WCHAR) * BUFFER_SIZE; 93 Status = RtlQueryAtomInAtomTable(AtomTable, 94 AtomC, 95 &Data1, 96 &Data2, 97 Buffer, 98 &NameLength); 99 printf(" Status 0x%08lx\n", Status); 100 if (NT_SUCCESS(Status)) 101 { 102 printf(" RefCount %ld\n", Data1); 103 printf(" PinCount %ld\n", Data2); 104 printf(" NameLength %lu\n", NameLength); 105 printf(" AtomName: %S\n", Buffer); 106 } 107 108 printf("RtlDestroyAtomTable()\n"); 109 RtlDestroyAtomTable(AtomTable); 110 111 112 printf("Atom table test app finished\n"); 113 } 114 115 return(0); 116 } 117