Win32k: ddemlwp.c 文件参考
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索');
/* @license-end */
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */
class="ui-resizable-handle">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('a00089.html',''); initResizable(); });
/* @license-end */
οnmοuseοver="return searchBox.OnSearchSelectShow()"
οnmοuseοut="return searchBox.OnSearchSelectHide()"
οnkeydοwn="return searchBox.OnSearchSelectKey(event)">
name="MSearchResults" id="MSearchResults">
浏览源代码.
函数 |
VOID | ProcessDDEMLInitiate (PCL_INSTANCE_INFO pcii, HWND hwndClient, GATOM aServer, GATOM aTopic) |
|
LRESULT | DDEMLMotherWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
LRESULT | DDEMLClientWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
LONG | DDEMLServerWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
|
PCONV_INFO | ProcessTerminateMsg (PCONV_INFO pcoi, HWND hwndFrom) |
|
VOID | ProcessAsyncDDEMsg (PCONV_INFO pcoi, UINT msg, HWND hwndFrom, LONG lParam) |
|
BOOL | CheckForQueuedMessages (PCONV_INFO pcoi) |
|
VOID | DumpDDEMessage (BOOL fFreeData, UINT msg, LONG lParam) |
|
BOOL | ProcessSyncDDEMessage (PCONV_INFO pcoi, UINT msg, LONG lParam) |
|
◆ CheckForQueuedMessages()
在文件 ddemlwp.c 第 662 行定义.
671
if (pcoi->
state & ST_PROCESSING) {
677 pci = GetClientInfo();
679 pcoi->
state |= ST_PROCESSING;
680
while (!(pcoi->
state & ST_BLOCKED) &&
683 pci->
CI_flags |= CI_PROCESSING_QUEUE;
688
if (pcoi->
dmqOut == NULL) {
693 pci->
CI_flags &= ~CI_PROCESSING_QUEUE;
695 pcoi->
state &= ~ST_PROCESSING;
引用了 CheckDDECritIn, _CLIENTINFO::CI_flags, _CLIENTINFO::cInDDEMLCallback, tagCONV_INFO::cLocks, DDEMLFree, tagCONV_INFO::dmqIn, tagCONV_INFO::dmqOut, tagDDE_MESSAGE_QUEUE::lParam, tagDDE_MESSAGE_QUEUE::msg, tagDDE_MESSAGE_QUEUE::next, ProcessSyncDDEMessage(), tagCONV_INFO::state , 以及 UserAssert.
被这些函数引用 DdeEnableCallback(), ProcessAsyncDDEMsg() , 以及 SetEnableState().
◆ DDEMLClientWndProc()
LRESULT DDEMLClientWndProc | ( | HWND | hwnd, |
| | UINT | message, |
| | WPARAM | wParam, |
| | LPARAM | lParam |
| ) | | |
在文件 ddemlwp.c 第 376 行定义.
395 lState = GetWindowLong(hwnd, GWL_CONVSTATE);
396
if (lState != CLST_CONNECTED) {
401
if (pciNew == NULL ||
402 (pci != NULL && lState == CLST_SINGLE_INITIALIZING)) {
411
if (pciNew->
ci.
pcii == NULL) {
421 SetWindowLong(hwnd, GWL_PCI, (LONG)pciNew);
429 GlobalDeleteAtom(LOWORD(lParam));
431 GlobalDeleteAtom(HIWORD(lParam));
434 pciNew->
ci.
state = (WORD)(ST_CONNECTED | ST_CLIENT |
440
if (pwnd == NULL)
goto Exit;
441 pcls = (
PCLS)REBASEALWAYS(pwnd, pcls);
443
if (!TestWF(pwnd, WFANSIPROC)) {
445 pciNew->
ci.
state |= ST_ISLOCAL;
449 pciNew->
ci.
state |= ST_ISLOCAL;
469
case WM_DDE_TERMINATE:
475 lRet = DefWindowProc(hwnd, message, wParam, lParam);
引用了 tagCLS::atomClassName, tagSERVERINFO::atomSysClass, tagCL_CONV_INFO::ci, CreateHandle(), DDEMLAlloc, DDEMLFree, DWORD, EnterDDECrit, GlobalToLocalAtom(), gpsi, HTYPE_CLIENT_CONVERSATION, tagCONV_INFO::hwndConv, InstFromHandle, LeaveDDECrit, tagCONV_INFO::next, tagCONV_INFO::pcii, PostMessage(), ProcessAsyncDDEMsg(), ProcessTerminateMsg(), SetCommonStateFlags(), UserAssert, ValidateHwnd , 以及 ValidateInstance().
被这些函数引用 RW_RegisterDDEMLClient().
◆ DDEMLMotherWndProc()
LRESULT DDEMLMotherWndProc | ( | HWND | hwnd, |
| | UINT | message, |
| | WPARAM | wParam, |
| | LPARAM | lParam |
| ) | | |
◆ DDEMLServerWndProc()
LONG DDEMLServerWndProc | ( | HWND | hwnd, |
| | UINT | message, |
| | WPARAM | wParam, |
| | LPARAM | lParam |
| ) | | |
◆ DumpDDEMessage()
VOID DumpDDEMessage | ( | BOOL | fFreeData, |
| | UINT | msg, |
| | LONG | lParam |
| ) | | |
◆ ProcessAsyncDDEMsg()
VOID ProcessAsyncDDEMsg | ( | PCONV_INFO | pcoi, |
| | UINT | msg, |
| | HWND | hwndFrom, |
| | LONG | lParam |
| ) | | |
在文件 ddemlwp.c 第 570 行定义.
581
while (pcoi != NULL && pcoi->
hwndPartner != hwndFrom) {
586
"Bogus DDE message %x received from %x by %x. Dumping.",
587 msg, hwndFrom, hwndT);
591
if (pcoi->
state & ST_CONNECTED) {
593
if (pcoi->
dmqOut == NULL &&
594 !(pcoi->
state & ST_BLOCKED)
611
if (pcoi->
state & ST_CONNECTED) {
614 pcoi->
state &= ~ST_CONNECTED;
626
if (pcoi->
dmqIn != NULL) {
630
if (pcoi->
dmqOut == NULL) {
636
if (pcoi->
cLocks == 0 && pcoi->
state & ST_FREE_CONV_RES_NOW) {
引用了 CheckForQueuedMessages(), tagCONV_INFO::cLocks, DDEMLAlloc, tagCONV_INFO::dmqIn, tagCONV_INFO::dmqOut, DumpDDEMessage(), DWORD, FreeConversationResources(), tagCONV_INFO::hwndConv, tagCONV_INFO::hwndPartner, tagDDE_MESSAGE_QUEUE::lParam, tagDDE_MESSAGE_QUEUE::msg, tagDDE_MESSAGE_QUEUE::next, tagCONV_INFO::next, tagDDE_MESSAGE_QUEUE::pcoi, PostMessage(), ProcessSyncDDEMessage(), RIP_WARNING, RIPMSG3 , 以及 tagCONV_INFO::state.
被这些函数引用 DDEMLClientWndProc() , 以及 DDEMLServerWndProc().
◆ ProcessDDEMLInitiate()
在文件 ddemlwp.c 第 57 行定义.
71
sizeof(SECURITY_QUALITY_OF_SERVICE),
72 SecurityImpersonation,
73 SECURITY_STATIC_TRACKING,
77 BOOL flags = ST_INLIST;
84
LATOM laService, laFree1 = 0;
85
LATOM laTopic, laFree2 = 0;
87
LATOM *plaNameService;
97
if (pcii->
afCmd & CBF_FAIL_CONNECTIONS || !
IsWindow(hwndClient)) {
102
if (pwndClient == NULL)
goto Exit;
104 pcls = (
PCLS)REBASEALWAYS(pwndClient, pcls);
105
if (!TestWF(pwndClient, WFANSIPROC)) {
115
if (flags & ST_ISLOCAL) {
119
if (pcii->
hInstServer == (HANDLE)GetWindowLong(hwndClient, GWL_SHINST)) {
120
if (pcii->
afCmd & CBF_FAIL_SELFCONNECTIONS) {
127
if (GetWindowLong(hwndClient, GWL_CONVSTATE) & CLST_SINGLE_INITIALIZING) {
157
if (!laService && pcii->
afCmd & APPCMD_FILTERINITS && *plaNameService == 0) {
163
if ((pcii->
afCmd & APPCMD_FILTERINITS) && laService) {
168
while (*plaNameService != 0 && *plaNameService != laService) {
171
if (*plaNameService == 0) {
179 fWild = !laService || !laTopic;
182 (WORD)(fWild ? XTYP_WILDCONNECT : XTYP_CONNECT),
188 flags & ST_ISLOCAL ? (
DWORD)&cc : 0,
189 (
DWORD)(flags & ST_ISSELF) ? 1 : 0);
204
while (php->hszSvc && php->hszTopic) {
235
for (pcoi = &psiT->
ci; pcoi != NULL; pcoi = pcoi->
next) {
246
if (hwndServer == 0) {
252 hwndServer = CreateWindowW((LPWSTR)(
gpsi->
atomSysClass[ICLS_DDEMLSERVERW]),
261 hwndServer = CreateWindowA((LPSTR)(
gpsi->
atomSysClass[ICLS_DDEMLSERVERA]),
272
if (hwndServer == 0) {
287
RIPMSG1(
RIP_WARNING,
"ProcessDDEMLInitiate:hwndServer (%x) destroyed due to low memory.", hwndServer);
304 SetWindowLong(hwndServer, GWL_PSI, (LONG)psi);
329 SendMessage(hwndClient, WM_DDE_ACK, (
DWORD)hwndServer,
333
if (!(pcii->
afCmd & CBF_SKIP_CONNECT_CONFIRMS)) {
335 (WORD)XTYP_CONNECT_CONFIRM,
342 (flags & ST_ISSELF) ? 1L : 0L);
347
if (!(flags & ST_INLIST)) {
引用了 tagCL_INSTANCE_INFO::afCmd, tagCL_INSTANCE_INFO::aServerLookup, tagCLS::atomClassName, tagSERVERINFO::atomSysClass, CheckDDECritOut, tagSVR_CONV_INFO::ci, tagCL_INSTANCE_INFO::ConvStartupState, CreateHandle(), tagCL_INSTANCE_INFO::cServerLookupAlloc, DdeAccessData(), DDEMLAlloc, DDEMLFree, DDEMLReAlloc, DdeUnaccessData(), DoCallback(), DWORD, EnterDDECrit, tagCL_INSTANCE_INFO::flags, GetConvContext(), GlobalToLocalAtom(), gpsi, tagCL_INSTANCE_INFO::hInstClient, tagCL_INSTANCE_INFO::hInstServer, HTYPE_SERVER_CONVERSATION, tagCL_INSTANCE_INFO::hwndMother, tagCONV_INFO::hwndPartner, tagSERVER_LOOKUP::hwndServer, IIF_UNICODE, IncLocalAtomCount(), InstFromHandle, InternalFreeDataHandle(), IsWindow(), tagSERVER_LOOKUP::laService, LATOM_FROM_HSZ, tagSERVER_LOOKUP::laTopic, LeaveDDECrit, LocalToGlobalAtom(), MONCONV, tagCONV_INFO::next, NORMAL_HSZ_FROM_LATOM, NtUserDdeGetQualityOfService(), NtUserDestroyWindow(), tagCL_INSTANCE_INFO::plaNameService, RIP_WARNING, RIPMSG1, SetCommonStateFlags() , 以及 ValidateHwnd.
被这些函数引用 DDEMLMotherWndProc().
◆ ProcessSyncDDEMessage()
在文件 ddemlwp.c 第 780 行定义.
785 BOOL fNotBlocked = TRUE;
799
if (pcoi->
state & ST_BLOCKNEXT) {
800 pcoi->
state ^= ST_BLOCKNEXT | ST_BLOCKED;
802
if (pcoi->
state & ST_BLOCKALLNEXT) {
804 ees.
wCmd = EC_DISABLE;
810
if (pcoi->
state & ST_CONNECTED) {
811
if (pcoi->
pxiOut == NULL) {
812
if (pcoi->
state & ST_CLIENT) {
828 pcoi->
state |= ST_BLOCKED;
829 pcoi->
state &= ~ST_BLOCKNEXT;
835
if (pcoi->
cLocks == 0 && pcoi->
state & ST_FREE_CONV_RES_NOW) {
843
if (pcii->
afCmd & APPCMD_UNINIT_ASAP &&
849
return (fNotBlocked);
引用了 tagCL_INSTANCE_INFO::afCmd, CheckDDECritIn, tagCL_INSTANCE_INFO::cInDDEMLCallback, tagCONV_INFO::cLocks, DdeUninitialize(), DumpDDEMessage(), DWORD, EnableEnumProc(), EnumChildWindows(), tagCL_INSTANCE_INFO::flags, FreeConversationResources(), HINST_ANY, tagCL_INSTANCE_INFO::hInstClient, HTYPE_TRANSACTION, tagCL_INSTANCE_INFO::hwndMother, tagXACT_INFO::hXact, IIF_IN_SYNC_XACT, tagCONV_INFO::pcii, tagXACT_INFO::pfnResponse, tagENABLE_ENUM_STRUCT::pfRet, tagCONV_INFO::pxiOut, SpontaneousClientMessage(), SpontaneousServerMessage(), tagCONV_INFO::state, UserAssert, ValidateCHandle(), tagENABLE_ENUM_STRUCT::wCmd , 以及 tagENABLE_ENUM_STRUCT::wCmd2.
被这些函数引用 CheckForQueuedMessages() , 以及 ProcessAsyncDDEMsg().
◆ ProcessTerminateMsg()
VOID ShutdownConversation(PCONV_INFO pcoi, BOOL fMakeCallback)
VOID DumpDDEMessage(BOOL fFreeData, UINT msg, LONG lParam)
LRESULT ProcessRegistrationMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
#define HTYPE_TRANSACTION
VOID FreeConversationResources(PCONV_INFO pcoi)
BOOL NtUserDestroyWindow(IN HWND hwnd)
struct tagCONV_INFO * next
HDDEDATA DoCallback(PCL_INSTANCE_INFO pcii, WORD wType, WORD wFmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dw1, DWORD dw2)
VOID ProcessAsyncDDEMsg(PCONV_INFO pcoi, UINT msg, HWND hwndFrom, LONG lParam)
BOOL CheckForQueuedMessages(PCONV_INFO pcoi)
VOID GetConvContext(HWND hwnd, LONG *pl)
BOOL SpontaneousClientMessage(PCL_CONV_INFO pci, UINT msg, LONG lParam)
#define InstFromHandle(h)
VOID SetCommonStateFlags(HWND hwndUs, HWND hwndThem, PWORD pwFlags)
BOOL ProcessSyncDDEMessage(PCONV_INFO pcoi, UINT msg, LONG lParam)
#define HTYPE_SERVER_CONVERSATION
LATOM GlobalToLocalAtom(GATOM ga)
#define RIPMSG3(flags, szFmt, p1, p2, p3)
BOOL NtUserDdeGetQualityOfService(IN HWND hwndClient, IN HWND hwndServer, IN PSECURITY_QUALITY_OF_SERVICE pqos)
#define RIPMSG1(flags, szFmt, p1)
PCL_INSTANCE_INFO ValidateInstance(HANDLE hInst)
BOOL APIENTRY PostMessage(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
BOOL APIENTRY FreeDDElParam(UINT msg, LONG lParam)
PSERVER_LOOKUP aServerLookup
struct tagSERVER_LOOKUP * PSERVER_LOOKUP
VOID FreeDDEData(HANDLE hDDE, BOOL fIgnorefRelease, BOOL fFreeTruelyGlobalObjects)
struct tagSVR_CONV_INFO * PSVR_CONV_INFO
#define NORMAL_HSZ_FROM_LATOM(a)
ddeml v[i< inst >][t< type >][hObj|pObj] Dump DDEML state information ddeml lists all ddeml instances for this process n ddeml t< type > lists all ddeml objects of the given type n n assumes link is first DWORD
BOOL WINAPI EnumChildWindows(HWND hwnd, WNDENUMPROC lpfn, LONG lParam)
PDDE_MESSAGE_QUEUE dmqOut
LPBYTE DdeAccessData(HDDEDATA hData, LPDWORD pcbDataSize)
#define LATOM_FROM_HSZ(hsz)
BOOL DdeUnaccessData(HDDEDATA hData)
VOID ProcessDDEMLInitiate(PCL_INSTANCE_INFO pcii, HWND hwndClient, GATOM aServer, GATOM aTopic)
ATOM atomSysClass[ICLS_MAX]
BOOL APIENTRY UnpackDDElParam(UINT msg, LONG lParam, PUINT puiLo, PUINT puiHi)
BOOL InternalFreeDataHandle(HDDEDATA hData, BOOL fIgnorefRelease)
#define HTYPE_CLIENT_CONVERSATION
struct tagCL_CONV_INFO * PCL_CONV_INFO
DWORD ValidateCHandle(HANDLE h, DWORD ExpectedType, DWORD ExpectedInstance)
#define ValidateHwnd(hwnd)
BOOL DdeUninitialize(DWORD idInst)
struct tagDDE_MESSAGE_QUEUE * next
LATOM IncLocalAtomCount(LATOM la)
PCONV_INFO ProcessTerminateMsg(PCONV_INFO pcoi, HWND hwndFrom)
typedef UINT(FAR WINAPI *MSGSOUNDPROC)()
BOOL EnableEnumProc(HWND hwnd, PENABLE_ENUM_STRUCT pees)
struct tagCONV_INFO * PCONV_INFO
#define DDEMLReAlloc(p, cb)
GATOM LocalToGlobalAtom(LATOM la)
BOOL SpontaneousServerMessage(PSVR_CONV_INFO psi, UINT msg, LONG lParam)
HANDLE CreateHandle(DWORD dwData, DWORD type, DWORD inst)
struct tagCONV_INFO * pcoi
#define MONCONV(pcoi, fConn)
一键复制
编辑
Web IDE
原始数据
按行查看
历史