Псевдокод для GetObjectType.

Тема в разделе "WASM.WIN32", создана пользователем rav, 28 сен 2006.

  1. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Всем доброго времени суток.

    Нужно воспроизвести функциональность обёртки GetObjectType для его системного вызова. Ни у кого нет готового псевдокода?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Код (Text):
    1. DWORD GetObjectType(HGDIOBJ h)
    2. {
    3.     DWORD dwRet = 0;
    4.     UINT uiIndex;
    5.  
    6.     FIXUP_HANDLE(h);
    7.  
    8.     uiIndex = HANDLE_TO_INDEX(h);
    9.  
    10.     if (uiIndex < MAX_HANDLE_COUNT)
    11.     {
    12.         PENTRY pentry = &pGdiSharedHandleTable[uiIndex];
    13.  
    14.         if (
    15.              (pentry->FullUnique == ((ULONG)h >> 16)) &&
    16.              ((pentry->ObjectOwner.Share.Pid == gW32PID) ||
    17.              (pentry->ObjectOwner.Share.Pid == 0))
    18.               )
    19.         {
    20.             switch (LO_TYPE(h))
    21.             {
    22.             case LO_BRUSH_TYPE:
    23.                 dwRet = OBJ_BRUSH;
    24.                 break;
    25.  
    26.             case LO_REGION_TYPE:
    27.                 dwRet = OBJ_REGION;
    28.                 break;
    29.  
    30.             case LO_PEN_TYPE:
    31.                 dwRet = OBJ_PEN;
    32.                 break;
    33.  
    34.             case LO_EXTPEN_TYPE:
    35.                 dwRet = OBJ_EXTPEN;
    36.                 break;
    37.  
    38.             case LO_FONT_TYPE:
    39.                 dwRet = OBJ_FONT;
    40.                 break;
    41.  
    42.             case LO_BITMAP_TYPE:
    43.                 dwRet = OBJ_BITMAP;
    44.                 break;
    45.  
    46.             case LO_PALETTE_TYPE:
    47.                 dwRet = OBJ_PAL;
    48.                 break;
    49.  
    50.             case LO_METAFILE16_TYPE:
    51.                 dwRet = OBJ_METAFILE;
    52.                 break;
    53.  
    54.             case LO_METAFILE_TYPE:
    55.                 dwRet = OBJ_ENHMETAFILE;
    56.                 break;
    57.  
    58.             case LO_METADC16_TYPE:
    59.                 dwRet = OBJ_METADC;
    60.                 break;
    61.  
    62.             case LO_DC_TYPE:
    63.  
    64.                 if( GetDCDWord( h, DDW_ISMEMDC, FALSE ) )
    65.                 {
    66.                     dwRet = OBJ_MEMDC;
    67.                 }
    68.                 else
    69.                 {
    70.                     dwRet = OBJ_DC;
    71.                 }
    72.                 break;
    73.  
    74.             case LO_ALTDC_TYPE:
    75.                 {
    76.                     PLDC pldc;
    77.                     DC_PLDC(h,pldc,0);
    78.                     dwRet = alPublicTypes[pldc->iType];
    79.                 }
    80.                 break;
    81.  
    82.             default:
    83.                 GdiSetLastError(ERROR_INVALID_HANDLE);
    84.                 break;
    85.             }
    86.         }
    87.     }
    88.  
    89.     return(dwRet);
    90. }
     
  3. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    О, спасибо! Сейчас будем разбираться. А я его чего-то проглядел это!