22#include <winpr/assert.h>
23#include <winpr/config.h>
26#include <winpr/library.h>
28#include <winpr/endian.h>
34#include "../handle/handle.h"
36static pthread_once_t sTebOnceControl = PTHREAD_ONCE_INIT;
37static pthread_key_t sTebKey;
39static void sTebDestruct(
void* teb)
44static void sTebInitOnce(
void)
46 pthread_key_create(&sTebKey, sTebDestruct);
49PTEB NtCurrentTeb(
void)
53 if (pthread_once(&sTebOnceControl, sTebInitOnce) == 0)
55 if ((teb = pthread_getspecific(sTebKey)) == NULL)
57 teb = calloc(1,
sizeof(TEB));
59 pthread_setspecific(sTebKey, teb);
66const char* FSInformationClass2Tag(FILE_INFORMATION_CLASS value)
70 case FileDirectoryInformation:
71 return "FileDirectoryInformation";
72 case FileFullDirectoryInformation:
73 return "FileFullDirectoryInformation";
74 case FileBothDirectoryInformation:
75 return "FileBothDirectoryInformation";
76 case FileBasicInformation:
77 return "FileBasicInformation";
78 case FileStandardInformation:
79 return "FileStandardInformation";
80 case FileInternalInformation:
81 return "FileInternalInformation";
82 case FileEaInformation:
83 return "FileEaInformation";
84 case FileAccessInformation:
85 return "FileAccessInformation";
86 case FileNameInformation:
87 return "FileNameInformation";
88 case FileRenameInformation:
89 return "FileRenameInformation";
90 case FileLinkInformation:
91 return "FileLinkInformation";
92 case FileNamesInformation:
93 return "FileNamesInformation";
94 case FileDispositionInformation:
95 return "FileDispositionInformation";
96 case FilePositionInformation:
97 return "FilePositionInformation";
98 case FileFullEaInformation:
99 return "FileFullEaInformation";
100 case FileModeInformation:
101 return "FileModeInformation";
102 case FileAlignmentInformation:
103 return "FileAlignmentInformation";
104 case FileAllInformation:
105 return "FileAllInformation";
106 case FileAllocationInformation:
107 return "FileAllocationInformation";
108 case FileEndOfFileInformation:
109 return "FileEndOfFileInformation";
110 case FileAlternateNameInformation:
111 return "FileAlternateNameInformation";
112 case FileStreamInformation:
113 return "FileStreamInformation";
114 case FilePipeInformation:
115 return "FilePipeInformation";
116 case FilePipeLocalInformation:
117 return "FilePipeLocalInformation";
118 case FilePipeRemoteInformation:
119 return "FilePipeRemoteInformation";
120 case FileMailslotQueryInformation:
121 return "FileMailslotQueryInformation";
122 case FileMailslotSetInformation:
123 return "FileMailslotSetInformation";
124 case FileCompressionInformation:
125 return "FileCompressionInformation";
126 case FileObjectIdInformation:
127 return "FileObjectIdInformation";
128 case FileCompletionInformation:
129 return "FileCompletionInformation";
130 case FileMoveClusterInformation:
131 return "FileMoveClusterInformation";
132 case FileQuotaInformation:
133 return "FileQuotaInformation";
134 case FileReparsePointInformation:
135 return "FileReparsePointInformation";
136 case FileNetworkOpenInformation:
137 return "FileNetworkOpenInformation";
138 case FileAttributeTagInformation:
139 return "FileAttributeTagInformation";
140 case FileTrackingInformation:
141 return "FileTrackingInformation";
142 case FileIdBothDirectoryInformation:
143 return "FileIdBothDirectoryInformation";
144 case FileIdFullDirectoryInformation:
145 return "FileIdFullDirectoryInformation";
146 case FileValidDataLengthInformation:
147 return "FileValidDataLengthInformation";
148 case FileShortNameInformation:
149 return "FileShortNameInformation";