callproc.c

来自「一个类似windows」· C语言 代码 · 共 157 行

C
157
字号
/* *  ReactOS W32 Subsystem *  Copyright (C) 1998 - 2006 ReactOS Team * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* $Id: class.c 21596 2006-04-15 10:41:58Z greatlrd $ * * COPYRIGHT:        See COPYING in the top level directory * PROJECT:          ReactOS kernel * PURPOSE:          Window classes * FILE:             subsys/win32k/ntuser/class.c * PROGRAMER:        Thomas Weidenmueller <w3seek@reactos.com> * REVISION HISTORY: *       06-06-2001  CSH  Created *//* INCLUDES ******************************************************************/#include <w32k.h>#define NDEBUG#include <debug.h>/* CALLPROC ******************************************************************/WNDPROCGetCallProcHandle(IN PCALLPROC CallProc){    /* FIXME - check for 64 bit architectures... */    return (WNDPROC)((ULONG_PTR)ObmObjectToHandle(CallProc) | 0xFFFF0000);}VOIDDestroyCallProc(IN PDESKTOP Desktop,                IN OUT PCALLPROC CallProc){    /* FIXME - use new object manager! */    HANDLE Handle = ObmObjectToHandle(CallProc);    ObmDeleteObject(Handle,                    otCallProc);}PCALLPROCCloneCallProc(IN PDESKTOP Desktop,              IN PCALLPROC CallProc){    PCALLPROC NewCallProc;    HANDLE Handle;    /* FIXME - use new object manager! */    NewCallProc = (PCALLPROC)ObmCreateObject(gHandleTable,                                             &Handle,                                             otCallProc,                                             sizeof(CALLPROC));    if (NewCallProc != NULL)    {        NewCallProc->pi = CallProc->pi;        NewCallProc->WndProc = CallProc->WndProc;        NewCallProc->Unicode = CallProc->Unicode;    }    return NewCallProc;}PCALLPROCCreateCallProc(IN PDESKTOP Desktop,               IN WNDPROC WndProc,               IN BOOL Unicode,               IN PW32PROCESSINFO pi){    PCALLPROC NewCallProc;    HANDLE Handle;    /* FIXME - use new object manager! */    NewCallProc = (PCALLPROC)ObmCreateObject(gHandleTable,                                             &Handle,                                             otCallProc,                                             sizeof(CALLPROC));    if (NewCallProc != NULL)    {        NewCallProc->pi = pi;        NewCallProc->WndProc = WndProc;        NewCallProc->Unicode = Unicode;    }    return NewCallProc;}BOOLUserGetCallProcInfo(IN HANDLE hCallProc,                    OUT PWNDPROC_INFO wpInfo){    PCALLPROC CallProc;    /* NOTE: Accessing the WNDPROC_INFO structure may raise an exception! */    /* FIXME - use new object manager! */    CallProc = UserGetObject(gHandleTable,                             hCallProc,                             otCallProc);    if (CallProc == NULL)    {        return FALSE;    }    if (CallProc->pi != GetW32ProcessInfo())    {        return FALSE;    }    wpInfo->WindowProc = CallProc->WndProc;    wpInfo->IsUnicode = CallProc->Unicode;    return TRUE;}BOOL NTAPINtUserDereferenceWndProcHandle(IN HANDLE wpHandle,                               OUT PWNDPROC_INFO wpInfo){    BOOL Ret = FALSE;    UserEnterShared();    _SEH_TRY    {        ProbeForWrite(wpInfo,                      sizeof(WNDPROC_INFO),                      sizeof(ULONG));        Ret = UserGetCallProcInfo(wpHandle,                                  wpInfo);    }    _SEH_HANDLE    {        SetLastWin32Error(_SEH_GetExceptionCode());    }    _SEH_END;    UserLeave();    return Ret;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?