injectpoolparty.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. #pragma once
  2. #include <windows.h>
  3. #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
  4. #define WORKER_FACTORY_RELEASE_WORKER 0x0001
  5. #define WORKER_FACTORY_WAIT 0x0002
  6. #define WORKER_FACTORY_SET_INFORMATION 0x0004
  7. #define WORKER_FACTORY_QUERY_INFORMATION 0x0008
  8. #define WORKER_FACTORY_READY_WORKER 0x0010
  9. #define WORKER_FACTORY_SHUTDOWN 0x0020
  10. #define WORKER_FACTORY_ALL_ACCESS ( \
  11. STANDARD_RIGHTS_REQUIRED | \
  12. WORKER_FACTORY_RELEASE_WORKER | \
  13. WORKER_FACTORY_WAIT | \
  14. WORKER_FACTORY_SET_INFORMATION | \
  15. WORKER_FACTORY_QUERY_INFORMATION | \
  16. WORKER_FACTORY_READY_WORKER | \
  17. WORKER_FACTORY_SHUTDOWN \
  18. )
  19. typedef struct _UNICODE_STRING {
  20. USHORT Length;
  21. USHORT MaximumLength;
  22. PWSTR Buffer;
  23. } UNICODE_STRING, * PUNICODE_STRING;
  24. typedef struct _TP_TASK_CALLBACKS
  25. {
  26. void* ExecuteCallback;
  27. void* Unposted;
  28. } TP_TASK_CALLBACKS, * PTP_TASK_CALLBACKS;
  29. typedef struct _TP_TASK
  30. {
  31. struct _TP_TASK_CALLBACKS* Callbacks;
  32. UINT32 NumaNode;
  33. UINT8 IdealProcessor;
  34. char Padding_242[3];
  35. struct _LIST_ENTRY ListEntry;
  36. } TP_TASK, * PTP_TASK;
  37. typedef struct _TPP_REFCOUNT
  38. {
  39. volatile INT32 Refcount;
  40. } TPP_REFCOUNT, * PTPP_REFCOUNT;
  41. typedef struct _TPP_CALLER
  42. {
  43. void* ReturnAddress;
  44. } TPP_CALLER, * PTPP_CALLER;
  45. typedef struct _TPP_PH
  46. {
  47. struct _TPP_PH_LINKS* Root;
  48. } TPP_PH, * PTPP_PH;
  49. typedef struct _TP_DIRECT
  50. {
  51. struct _TP_TASK Task;
  52. UINT64 Lock;
  53. struct _LIST_ENTRY IoCompletionInformationList;
  54. void* Callback;
  55. UINT32 NumaNode;
  56. UINT8 IdealProcessor;
  57. char __PADDING__[3];
  58. } TP_DIRECT, * PTP_DIRECT;
  59. typedef struct _TPP_TIMER_SUBQUEUE
  60. {
  61. INT64 Expiration;
  62. struct _TPP_PH WindowStart;
  63. struct _TPP_PH WindowEnd;
  64. void* Timer;
  65. void* TimerPkt;
  66. struct _TP_DIRECT Direct;
  67. UINT32 ExpirationWindow;
  68. INT32 __PADDING__[1];
  69. } TPP_TIMER_SUBQUEUE, * PTPP_TIMER_SUBQUEUE;
  70. typedef struct _TPP_TIMER_QUEUE
  71. {
  72. struct _RTL_SRWLOCK Lock;
  73. struct _TPP_TIMER_SUBQUEUE AbsoluteQueue;
  74. struct _TPP_TIMER_SUBQUEUE RelativeQueue;
  75. INT32 AllocatedTimerCount;
  76. INT32 __PADDING__[1];
  77. } TPP_TIMER_QUEUE, * PTPP_TIMER_QUEUE;
  78. typedef struct _TPP_NUMA_NODE
  79. {
  80. INT32 WorkerCount;
  81. } TPP_NUMA_NODE, * PTPP_NUMA_NODE;
  82. typedef union _TPP_POOL_QUEUE_STATE
  83. {
  84. union
  85. {
  86. INT64 Exchange;
  87. struct
  88. {
  89. INT32 RunningThreadGoal : 16;
  90. UINT32 PendingReleaseCount : 16;
  91. UINT32 QueueLength;
  92. };
  93. };
  94. } TPP_POOL_QUEUE_STATE, * PTPP_POOL_QUEUE_STATE;
  95. typedef struct _TPP_QUEUE
  96. {
  97. struct _LIST_ENTRY Queue;
  98. struct _RTL_SRWLOCK Lock;
  99. } TPP_QUEUE, * PTPP_QUEUE;
  100. typedef struct _FULL_TP_POOL
  101. {
  102. struct _TPP_REFCOUNT Refcount;
  103. long Padding_239;
  104. union _TPP_POOL_QUEUE_STATE QueueState;
  105. struct _TPP_QUEUE* TaskQueue[3];
  106. struct _TPP_NUMA_NODE* NumaNode;
  107. struct _GROUP_AFFINITY* ProximityInfo;
  108. void* WorkerFactory;
  109. void* CompletionPort;
  110. struct _RTL_SRWLOCK Lock;
  111. struct _LIST_ENTRY PoolObjectList;
  112. struct _LIST_ENTRY WorkerList;
  113. struct _TPP_TIMER_QUEUE TimerQueue;
  114. struct _RTL_SRWLOCK ShutdownLock;
  115. UINT8 ShutdownInitiated;
  116. UINT8 Released;
  117. UINT16 PoolFlags;
  118. long Padding_240;
  119. struct _LIST_ENTRY PoolLinks;
  120. struct _TPP_CALLER AllocCaller;
  121. struct _TPP_CALLER ReleaseCaller;
  122. volatile INT32 AvailableWorkerCount;
  123. volatile INT32 LongRunningWorkerCount;
  124. UINT32 LastProcCount;
  125. volatile INT32 NodeStatus;
  126. volatile INT32 BindingCount;
  127. UINT32 CallbackChecksDisabled : 1;
  128. UINT32 TrimTarget : 11;
  129. UINT32 TrimmedThrdCount : 11;
  130. UINT32 SelectedCpuSetCount;
  131. long Padding_241;
  132. struct _RTL_CONDITION_VARIABLE TrimComplete;
  133. struct _LIST_ENTRY TrimmedWorkerList;
  134. } FULL_TP_POOL, * PFULL_TP_POOL;
  135. typedef struct _ALPC_WORK_ON_BEHALF_TICKET
  136. {
  137. UINT32 ThreadId;
  138. UINT32 ThreadCreationTimeLow;
  139. } ALPC_WORK_ON_BEHALF_TICKET, * PALPC_WORK_ON_BEHALF_TICKET;
  140. typedef union _TPP_WORK_STATE
  141. {
  142. union
  143. {
  144. INT32 Exchange;
  145. UINT32 Insertable : 1;
  146. UINT32 PendingCallbackCount : 31;
  147. };
  148. } TPP_WORK_STATE, * PTPP_WORK_STATE;
  149. typedef struct _TPP_ITE_WAITER
  150. {
  151. struct _TPP_ITE_WAITER* Next;
  152. void* ThreadId;
  153. } TPP_ITE_WAITER, * PTPP_ITE_WAITER;
  154. typedef struct _TPP_PH_LINKS
  155. {
  156. struct _LIST_ENTRY Siblings;
  157. struct _LIST_ENTRY Children;
  158. INT64 Key;
  159. } TPP_PH_LINKS, * PTPP_PH_LINKS;
  160. typedef struct _TPP_ITE
  161. {
  162. struct _TPP_ITE_WAITER* First;
  163. } TPP_ITE, * PTPP_ITE;
  164. typedef union _TPP_FLAGS_COUNT
  165. {
  166. union
  167. {
  168. UINT64 Count : 60;
  169. UINT64 Flags : 4;
  170. INT64 Data;
  171. };
  172. } TPP_FLAGS_COUNT, * PTPP_FLAGS_COUNT;
  173. typedef struct _TPP_BARRIER
  174. {
  175. volatile union _TPP_FLAGS_COUNT Ptr;
  176. struct _RTL_SRWLOCK WaitLock;
  177. struct _TPP_ITE WaitList;
  178. } TPP_BARRIER, * PTPP_BARRIER;
  179. typedef struct _TP_CLEANUP_GROUP
  180. {
  181. struct _TPP_REFCOUNT Refcount;
  182. INT32 Released;
  183. struct _RTL_SRWLOCK MemberLock;
  184. struct _LIST_ENTRY MemberList;
  185. struct _TPP_BARRIER Barrier;
  186. struct _RTL_SRWLOCK CleanupLock;
  187. struct _LIST_ENTRY CleanupList;
  188. } TP_CLEANUP_GROUP, * PTP_CLEANUP_GROUP;
  189. typedef struct _TPP_CLEANUP_GROUP_MEMBER
  190. {
  191. struct _TPP_REFCOUNT Refcount;
  192. long Padding_233;
  193. const struct _TPP_CLEANUP_GROUP_MEMBER_VFUNCS* VFuncs;
  194. struct _TP_CLEANUP_GROUP* CleanupGroup;
  195. void* CleanupGroupCancelCallback;
  196. void* FinalizationCallback;
  197. struct _LIST_ENTRY CleanupGroupMemberLinks;
  198. struct _TPP_BARRIER CallbackBarrier;
  199. union
  200. {
  201. void* Callback;
  202. void* WorkCallback;
  203. void* SimpleCallback;
  204. void* TimerCallback;
  205. void* WaitCallback;
  206. void* IoCallback;
  207. void* AlpcCallback;
  208. void* AlpcCallbackEx;
  209. void* JobCallback;
  210. };
  211. void* Context;
  212. struct _ACTIVATION_CONTEXT* ActivationContext;
  213. void* SubProcessTag;
  214. struct _GUID ActivityId;
  215. struct _ALPC_WORK_ON_BEHALF_TICKET WorkOnBehalfTicket;
  216. void* RaceDll;
  217. FULL_TP_POOL* Pool;
  218. struct _LIST_ENTRY PoolObjectLinks;
  219. union
  220. {
  221. volatile INT32 Flags;
  222. UINT32 LongFunction : 1;
  223. UINT32 Persistent : 1;
  224. UINT32 UnusedPublic : 14;
  225. UINT32 Released : 1;
  226. UINT32 CleanupGroupReleased : 1;
  227. UINT32 InCleanupGroupCleanupList : 1;
  228. UINT32 UnusedPrivate : 13;
  229. };
  230. long Padding_234;
  231. struct _TPP_CALLER AllocCaller;
  232. struct _TPP_CALLER ReleaseCaller;
  233. enum _TP_CALLBACK_PRIORITY CallbackPriority;
  234. INT32 __PADDING__[1];
  235. } TPP_CLEANUP_GROUP_MEMBER, * PTPP_CLEANUP_GROUP_MEMBER;
  236. typedef struct _FULL_TP_WORK
  237. {
  238. struct _TPP_CLEANUP_GROUP_MEMBER CleanupGroupMember;
  239. struct _TP_TASK Task;
  240. volatile union _TPP_WORK_STATE WorkState;
  241. INT32 __PADDING__[1];
  242. } FULL_TP_WORK, * PFULL_TP_WORK;
  243. typedef struct _FULL_TP_TIMER
  244. {
  245. struct _FULL_TP_WORK Work;
  246. struct _RTL_SRWLOCK Lock;
  247. union
  248. {
  249. struct _TPP_PH_LINKS WindowEndLinks;
  250. struct _LIST_ENTRY ExpirationLinks;
  251. };
  252. struct _TPP_PH_LINKS WindowStartLinks;
  253. INT64 DueTime;
  254. struct _TPP_ITE Ite;
  255. UINT32 Window;
  256. UINT32 Period;
  257. UINT8 Inserted;
  258. UINT8 WaitTimer;
  259. union
  260. {
  261. UINT8 TimerStatus;
  262. UINT8 InQueue : 1;
  263. UINT8 Absolute : 1;
  264. UINT8 Cancelled : 1;
  265. };
  266. UINT8 BlockInsert;
  267. INT32 __PADDING__[1];
  268. } FULL_TP_TIMER, * PFULL_TP_TIMER;
  269. typedef struct _FULL_TP_WAIT
  270. {
  271. struct _FULL_TP_TIMER Timer;
  272. void* Handle;
  273. void* WaitPkt;
  274. void* NextWaitHandle;
  275. union _LARGE_INTEGER NextWaitTimeout;
  276. struct _TP_DIRECT Direct;
  277. union
  278. {
  279. union
  280. {
  281. UINT8 AllFlags;
  282. UINT8 NextWaitActive : 1;
  283. UINT8 NextTimeoutActive : 1;
  284. UINT8 CallbackCounted : 1;
  285. UINT8 Spare : 5;
  286. };
  287. } WaitFlags;
  288. char __PADDING__[7];
  289. } FULL_TP_WAIT, * PFULL_TP_WAIT;
  290. typedef struct _FULL_TP_IO
  291. {
  292. struct _TPP_CLEANUP_GROUP_MEMBER CleanupGroupMember;
  293. struct _TP_DIRECT Direct;
  294. void* File;
  295. volatile INT32 PendingIrpCount;
  296. INT32 __PADDING__[1];
  297. } FULL_TP_IO, * PFULL_TP_IO;
  298. typedef struct _FULL_TP_ALPC
  299. {
  300. struct _TP_DIRECT Direct;
  301. struct _TPP_CLEANUP_GROUP_MEMBER CleanupGroupMember;
  302. void* AlpcPort;
  303. INT32 DeferredSendCount;
  304. INT32 LastConcurrencyCount;
  305. union
  306. {
  307. UINT32 Flags;
  308. UINT32 ExTypeCallback : 1;
  309. UINT32 CompletionListRegistered : 1;
  310. UINT32 Reserved : 30;
  311. };
  312. INT32 __PADDING__[1];
  313. } FULL_TP_ALPC, * PFULL_TP_ALPC;
  314. typedef struct _T2_SET_PARAMETERS_V0
  315. {
  316. ULONG Version;
  317. ULONG Reserved;
  318. LONGLONG NoWakeTolerance;
  319. } T2_SET_PARAMETERS, * PT2_SET_PARAMETERS;
  320. typedef enum _PROCESSINFOCLASS {
  321. ProcessBasicInformation = 0,
  322. ProcessDebugPort = 7,
  323. ProcessWow64Information = 26,
  324. ProcessImageFileName = 27,
  325. ProcessBreakOnTermination = 29
  326. } PROCESSINFOCLASS;
  327. typedef enum _OBJECT_INFORMATION_CLASS {
  328. ObjectBasicInformation = 0,
  329. ObjectTypeInformation = 2
  330. } OBJECT_INFORMATION_CLASS;
  331. typedef struct _PROCESS_HANDLE_TABLE_ENTRY_INFO
  332. {
  333. HANDLE HandleValue;
  334. ULONG_PTR HandleCount;
  335. ULONG_PTR PointerCount;
  336. ACCESS_MASK GrantedAccess;
  337. ULONG ObjectTypeIndex;
  338. ULONG HandleAttributes;
  339. ULONG Reserved;
  340. } PROCESS_HANDLE_TABLE_ENTRY_INFO, * PPROCESS_HANDLE_TABLE_ENTRY_INFO;
  341. typedef struct _PROCESS_HANDLE_SNAPSHOT_INFORMATION
  342. {
  343. ULONG_PTR NumberOfHandles;
  344. ULONG_PTR Reserved;
  345. PROCESS_HANDLE_TABLE_ENTRY_INFO Handles[ANYSIZE_ARRAY];
  346. } PROCESS_HANDLE_SNAPSHOT_INFORMATION, * PPROCESS_HANDLE_SNAPSHOT_INFORMATION;
  347. typedef enum
  348. {
  349. ProcessHandleInformation = 51
  350. } PROCESS_INFOCLASS;
  351. typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION {
  352. UNICODE_STRING TypeName;
  353. ULONG Reserved[22];
  354. } PUBLIC_OBJECT_TYPE_INFORMATION, * PPUBLIC_OBJECT_TYPE_INFORMATION;
  355. typedef struct _WORKER_FACTORY_BASIC_INFORMATION
  356. {
  357. LARGE_INTEGER Timeout;
  358. LARGE_INTEGER RetryTimeout;
  359. LARGE_INTEGER IdleTimeout;
  360. BOOLEAN Paused;
  361. BOOLEAN TimerSet;
  362. BOOLEAN QueuedToExWorker;
  363. BOOLEAN MayCreate;
  364. BOOLEAN CreateInProgress;
  365. BOOLEAN InsertedIntoQueue;
  366. BOOLEAN Shutdown;
  367. ULONG BindingCount;
  368. ULONG ThreadMinimum;
  369. ULONG ThreadMaximum;
  370. ULONG PendingWorkerCount;
  371. ULONG WaitingWorkerCount;
  372. ULONG TotalWorkerCount;
  373. ULONG ReleaseCount;
  374. LONGLONG InfiniteWaitGoal;
  375. PVOID StartRoutine;
  376. PVOID StartParameter;
  377. HANDLE ProcessId;
  378. SIZE_T StackReserve;
  379. SIZE_T StackCommit;
  380. NTSTATUS LastThreadCreationStatus;
  381. } WORKER_FACTORY_BASIC_INFORMATION, * PWORKER_FACTORY_BASIC_INFORMATION;
  382. typedef struct _CLIENT_ID {
  383. HANDLE UniqueProcess;
  384. HANDLE UniqueThread;
  385. } CLIENT_ID, * PCLIENT_ID;
  386. typedef struct _OBJECT_ATTRIBUTES {
  387. ULONG Length;
  388. HANDLE RootDirectory;
  389. PUNICODE_STRING ObjectName;
  390. ULONG Attributes;
  391. PVOID SecurityDescriptor;
  392. PVOID SecurityQualityOfService;
  393. } OBJECT_ATTRIBUTES, * POBJECT_ATTRIBUTES;
  394. typedef NTSTATUS(WINAPI* NtOpenProcess_t)(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId);
  395. typedef NTSTATUS(WINAPI* NtDelayExecution_t)(BOOLEAN, PLARGE_INTEGER);
  396. typedef NTSTATUS(WINAPI* NtAllocateVirtualMemory_t)(HANDLE ProcessHandle, PVOID* BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect);
  397. typedef NTSTATUS(WINAPI* NtWriteVirtualMemory_t)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
  398. typedef NTSTATUS(WINAPI* NtProtectVirtualMemory_t)(HANDLE ProcessHandle, PVOID* BaseAddress, PULONG NumberOfBytesToProtect, ULONG NewAccessProtection, PULONG OldAccessProtection);
  399. typedef NTSTATUS(WINAPI* NtClose_t)(HANDLE Handle);
  400. typedef NTSTATUS (NTAPI* NtSetTimer2_t)(HANDLE TimerHandle, PLARGE_INTEGER DueTime, PLARGE_INTEGER Period, PT2_SET_PARAMETERS Parameters);
  401. typedef NTSTATUS (NTAPI* NtQueryInformationProcess_t)(IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PVOID ProcessInformation, IN ULONG ProcessInformationLength, OUT PULONG ReturnLength OPTIONAL);
  402. typedef NTSTATUS (NTAPI* NtQueryObject_t)(HANDLE Handle, OBJECT_INFORMATION_CLASS ObjectInformationClass, PVOID ObjectInformation, ULONG ObjectInformationLength, PULONG ReturnLength);
  403. typedef enum _QUERY_WORKERFACTORYINFOCLASS { WorkerFactoryBasicInformation = 7, } QUERY_WORKERFACTORYINFOCLASS, *PQUERY_WORKERFACTORYINFOCLASS;
  404. typedef NTSTATUS (NTAPI* NtQueryInformationWorkerFactory_t)(HANDLE WorkerFactoryHandle, QUERY_WORKERFACTORYINFOCLASS WorkerFactoryInformationClass, PVOID WorkerFactoryInformation, ULONG WorkerFactoryInformationLength, PULONG ReturnLength);
  405. typedef NTSTATUS (NTAPI * ZwSetIoCompletion_t)(HANDLE IoCompletionHandle, PVOID KeyContext, PVOID ApcContext, NTSTATUS IoStatus, ULONG_PTR IoStatusInformation);
  406. WINBASEAPI void *__cdecl MSVCRT$realloc(void *_Memory, size_t _NewSize);
  407. WINBASEAPI wchar_t *__cdecl MSVCRT$wcscmp(const wchar_t *_lhs,const wchar_t *_rhs);
  408. WINBASEAPI HANDLE WINAPI KERNEL32$GetCurrentProcess (VOID);
  409. WINBASEAPI BOOL WINAPI KERNEL32$DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions);
  410. WINBASEAPI HANDLE WINAPI KERNEL32$OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
  411. WINBASEAPI LPVOID WINAPI KERNEL32$VirtualAllocEx(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
  412. WINBASEAPI BOOL WINAPI KERNEL32$WriteProcessMemory(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesWritten);
  413. WINBASEAPI PTP_TIMER WINAPI KERNEL32$CreateThreadpoolTimer( PTP_TIMER_CALLBACK pfnti, PVOID pv, PTP_CALLBACK_ENVIRON pcbe);
  414. WINBASEAPI BOOL WINAPI KERNEL32$SetInformationJobObject(HANDLE hJob, JOBOBJECTINFOCLASS JobObjectInformationClass, LPVOID lpJobObjectInformation, DWORD cbJobObjectInformationLength);
  415. WINBASEAPI BOOL WINAPI KERNEL32$VirtualProtectEx(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
  416. WINBASEAPI BOOL WINAPI KERNEL32$VirtualFreeEx(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
  417. WINBASEAPI BOOL WINAPI KERNEL32$CloseHandle(HANDLE hObject);
  418. WINBASEAPI int __cdecl MSVCRT$strcmp(const char *str1, const char *str2);
  419. WINBASEAPI void __cdecl MSVCRT$free(void *ptr);
  420. WINBASEAPI BOOL WINAPI KERNEL32$ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesRead);
  421. WINBASEAPI PTP_WORK WINAPI KERNEL32$CreateThreadpoolWork(PTP_WORK_CALLBACK pfnwk, PVOID pv, PTP_CALLBACK_ENVIRON pcbe);
  422. WINBASEAPI void * __cdecl MSVCRT$memset(void *dest, int ch, size_t count);