Reactos
at master 116 lines 2.7 kB view raw
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 10int 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}