// Win32ClientInfo[WIN32_CLIENT_INFO_LENGTH]; (ntpsapi.h)
// (ifdef FE_SB, sizeof(CLIENTINFO) == 0x7c == 4 * WIN32_CLIENT_INFO_LENGTH)
#pragma pack(1)
typedef struct _CLIENTINFO {
DWORD CI_flags; // Needs to be first because CSR
DWORD cSpins;
DWORD dwExpWinVer;
DWORD dwCompatFlags;
DWORD dwTIFlags;
PDESKTOPINFO pDeskInfo;
ULONG ulClientDelta;
struct tagHOOK *phkCurrent;
DWORD fsHooks;
CALLBACKWND CallbackWnd;
DWORD dwHookCurrent;
int cInDDEMLCallback;
HANDLE hDdemlCallbackInst;
PCLIENTTHREADINFO pClientThreadInfo;
DWORD dwHookData;
DWORD dwKeyCache;
BYTE afKeyState[CBKEYCACHE];
DWORD dwAsyncKeyCache;
BYTE afAsyncKeyState[CBASYNCKEYCACHE];
BYTE afAsyncKeyStateRecentDown[CBASYNCKEYCACHE];
WORD CodePage;
HKL hKL;
BYTE achDbcsCF[2]; // Save ANSI DBCS LeadByte character code
// in this field for ANSI to Unicode.
// Uses SendMessageA/PostMessageA from CLIENT
// to SERVER (index 0)
// And...
// Uses SendMessageA/DispatchMessageA
// for CLIENT to CLIENT (index 1)
MSG msgDbcsCB; // Save ANSI DBCS character message in
// this field for convert Unicode to ANSI.
// Uses GetMessageA/PeekMessageA from
// SERVER to CLIENT
} CLIENTINFO, *PCLIENTINFO;