Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

server.h

Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 1985 - 1999, Microsoft Corporation 00004 00005 Module Name: 00006 00007 server.h 00008 00009 Abstract: 00010 00011 This module contains the internal structures and definitions used 00012 by the console server. 00013 00014 Author: 00015 00016 Therese Stowell (thereses) 12-Nov-1990 00017 00018 Revision History: 00019 00020 --*/ 00021 00022 #ifndef _SERVER_H_ 00023 #define _SERVER_H_ 00024 00025 // 00026 // This message is used to notify the input thread that a console window should 00027 // go away. 00028 // 00029 00030 typedef struct _CONSOLE_SHARE_ACCESS { 00031 ULONG OpenCount; 00032 ULONG Readers; 00033 ULONG Writers; 00034 ULONG SharedRead; 00035 ULONG SharedWrite; 00036 } CONSOLE_SHARE_ACCESS, *PCONSOLE_SHARE_ACCESS; 00037 00038 #include "input.h" 00039 #include "output.h" 00040 #if defined(FE_IME) 00041 #include "conime.h" 00042 #include "convarea.h" 00043 #endif 00044 00045 typedef struct _CONSOLE_PROCESS_HANDLE { 00046 LIST_ENTRY ListLink; 00047 HANDLE ProcessHandle; 00048 PCSR_PROCESS Process; 00049 ULONG TerminateCount; 00050 LPTHREAD_START_ROUTINE CtrlRoutine; 00051 LPTHREAD_START_ROUTINE PropRoutine; 00052 } CONSOLE_PROCESS_HANDLE, *PCONSOLE_PROCESS_HANDLE; 00053 00054 typedef struct _INPUT_THREAD_INFO { 00055 HANDLE ThreadHandle; 00056 DWORD ThreadId; 00057 HDESK Desktop; 00058 ULONG WindowCount; 00059 #if defined(FE_IME) 00060 HWND hWndConsoleIME; 00061 #endif 00062 } INPUT_THREAD_INFO, *PINPUT_THREAD_INFO; 00063 00064 typedef struct _INPUT_THREAD_INIT_INFO { 00065 HANDLE ThreadHandle; 00066 HANDLE InitCompleteEventHandle; 00067 HDESK DesktopHandle; 00068 NTSTATUS InitStatus; 00069 } INPUT_THREAD_INIT_INFO, *PINPUT_THREAD_INIT_INFO; 00070 00071 typedef struct _CONSOLE_MSG { 00072 LIST_ENTRY ListLink; 00073 UINT Message; 00074 WPARAM wParam; 00075 LPARAM lParam; 00076 } CONSOLE_MSG, *PCONSOLE_MSG; 00077 00078 typedef struct _CONSOLE_THREAD_MSG { 00079 CONSOLE_MSG; 00080 DWORD dwThreadId; 00081 } CONSOLE_THREAD_MSG, *PCONSOLE_THREAD_MSG; 00082 00083 // Flags flags 00084 00085 #define CONSOLE_IS_ICONIC 0x00000001 00086 #define CONSOLE_OUTPUT_SUSPENDED 0x00000002 00087 #define CONSOLE_HAS_FOCUS 0x00000004 00088 #define CONSOLE_IGNORE_NEXT_MOUSE_INPUT 0x00000008 00089 #define CONSOLE_SELECTING 0x00000010 00090 #define CONSOLE_SCROLLING 0x00000020 00091 #define CONSOLE_DISABLE_CLOSE 0x00000040 00092 #define CONSOLE_NOTIFY_LAST_CLOSE 0x00000080 00093 #define CONSOLE_NO_WINDOW 0x00000100 00094 #define CONSOLE_VDM_REGISTERED 0x00000200 00095 #define CONSOLE_UPDATING_SCROLL_BARS 0x00000400 00096 #define CONSOLE_QUICK_EDIT_MODE 0x00000800 00097 #define CONSOLE_TERMINATING 0x00001000 00098 #define CONSOLE_CONNECTED_TO_EMULATOR 0x00002000 00099 #define CONSOLE_FULLSCREEN_NOPAINT 0x00004000 00100 #define CONSOLE_SHUTTING_DOWN 0x00008000 00101 #define CONSOLE_AUTO_POSITION 0x00010000 00102 #define CONSOLE_IGNORE_NEXT_KEYUP 0x00020000 00103 #define CONSOLE_WOW_REGISTERED 0x00040000 00104 #define CONSOLE_USE_PRIVATE_FLAGS 0x00080000 00105 #define CONSOLE_HISTORY_NODUP 0x00100000 00106 #define CONSOLE_SCROLLBAR_TRACKING 0x00200000 00107 #define CONSOLE_IN_DESTRUCTION 0x00400000 00108 #define CONSOLE_SETTING_WINDOW_SIZE 0x00800000 00109 #define CONSOLE_DEFAULT_BUFFER_SIZE 0x01000000 00110 #if defined(FE_SB) 00111 #define CONSOLE_OS2_REGISTERED 0x20000000 00112 #define CONSOLE_OS2_OEM_FORMAT 0x40000000 00113 #if defined(FE_IME) 00114 #define CONSOLE_JUST_VDM_UNREGISTERED 0x80000000 00115 #endif // FE_IME 00116 #endif 00117 00118 #define CONSOLE_SUSPENDED (CONSOLE_OUTPUT_SUSPENDED) 00119 00120 // SelectionFlags flags 00121 00122 #define CONSOLE_NO_SELECTION 0 00123 #define CONSOLE_SELECTION_NOT_EMPTY 1 // non-null select rectangle 00124 #define CONSOLE_MOUSE_SELECTION 2 // selecting with mouse 00125 #define CONSOLE_MOUSE_DOWN 4 // mouse is down 00126 #define CONSOLE_SELECTION_INVERTED 8 // selection is inverted (turned off) 00127 00128 typedef struct _CONSOLE_INFORMATION { 00129 CRITICAL_SECTION ConsoleLock; // serialize input and output using this 00130 ULONG RefCount; 00131 ULONG WaitCount; 00132 INPUT_INFORMATION InputBuffer; 00133 PSCREEN_INFORMATION CurrentScreenBuffer; 00134 PSCREEN_INFORMATION ScreenBuffers; // singly linked list 00135 HWINSTA hWinSta; // server handle to windowstation 00136 HDESK hDesk; // server handle to desktop 00137 HWND hWnd; 00138 HKL hklActive; // keyboard layout for this console window 00139 HDC hDC; // server side hDC 00140 HMENU hMenu; // handle to system menu 00141 HMENU hHeirMenu; // handle to menu we append to system menu 00142 HPALETTE hSysPalette; 00143 RECT WindowRect; 00144 DWORD ResizeFlags; 00145 LIST_ENTRY OutputQueue; 00146 HANDLE InitEvents[NUMBER_OF_INITIALIZATION_EVENTS]; 00147 HANDLE ClientThreadHandle; 00148 LIST_ENTRY ProcessHandleList; 00149 LIST_ENTRY CommandHistoryList; 00150 LIST_ENTRY ExeAliasList; 00151 SHORT NumCommandHistories; 00152 SHORT MaxCommandHistories; 00153 SHORT CommandHistorySize; 00154 USHORT OriginalTitleLength; 00155 USHORT TitleLength; 00156 LPWSTR OriginalTitle; 00157 LPWSTR Title; 00158 DWORD dwHotKey; 00159 HICON hIcon; 00160 HICON hSmIcon; 00161 INT iIconId; 00162 WORD LastAttributes; 00163 BYTE ReserveKeys; // keys reserved by app (i.e. ctrl-esc) 00164 DWORD Flags; 00165 00166 // if a wait has been satisfied, the pointer to the wait queue is stored 00167 // here. 00168 00169 PLIST_ENTRY WaitQueue; 00170 00171 // the following fields are used for selection 00172 00173 DWORD SelectionFlags; 00174 SMALL_RECT SelectionRect; 00175 COORD SelectionAnchor; 00176 COORD TextCursorPosition; // current position on screen (in screen buffer coords). 00177 ULONG TextCursorSize; 00178 BOOLEAN TextCursorVisible; // whether cursor is visible (set by user) 00179 00180 BOOLEAN InsertMode; // used by command line editing 00181 00182 // following fields are used when window is created 00183 00184 WORD wShowWindow; 00185 int dwWindowOriginX; 00186 int dwWindowOriginY; 00187 00188 WORD FullScreenFlags; 00189 WORD PopupCount; 00190 00191 // following fields are used for the VDM 00192 00193 HANDLE VDMStartHardwareEvent; 00194 HANDLE VDMEndHardwareEvent; 00195 HANDLE VDMProcessHandle; 00196 HANDLE VDMProcessId; 00197 00198 HANDLE VDMBufferSectionHandle; 00199 PCHAR_INFO VDMBuffer; 00200 PCHAR_INFO VDMBufferClient; 00201 COORD VDMBufferSize; 00202 00203 HANDLE StateSectionHandle; // used for get/sethardwarestate 00204 PVOID StateBuffer; 00205 PVOID StateBufferClient; 00206 DWORD StateLength; 00207 00208 // the following fields are used for ansi-unicode translation 00209 00210 UINT CP; 00211 UINT OutputCP; 00212 00213 // 00214 // these two fields are used while getting the icon from the 00215 // program manager via DDE. 00216 // 00217 00218 HWND hWndProgMan; 00219 BOOL bIconInit; 00220 00221 HANDLE ConsoleHandle; 00222 00223 ULONG CtrlFlags; // indicates outstanding ctrl requests 00224 ULONG LimitingProcessId; 00225 HANDLE TerminationEvent; 00226 00227 SHORT VerticalClientToWindow; 00228 SHORT HorizontalClientToWindow; 00229 00230 COLORREF ColorTable[ 16 ]; 00231 HANDLE hProcessLastNotifyClose; // process handle of last-close-notify 00232 HANDLE ProcessIdLastNotifyClose; // process unique id of last-close-notify 00233 HWND hWndProperties; 00234 00235 PINPUT_THREAD_INFO InputThreadInfo; // console thread info 00236 00237 LIST_ENTRY MessageQueue; 00238 00239 #if defined(FE_SB) 00240 CPINFO CPInfo; 00241 CPINFO OutputCPInfo; 00242 00243 DWORD ReadConInpNumBytesUnicode; 00244 DWORD ReadConInpNumBytesTemp; 00245 00246 DWORD WriteConOutNumBytesUnicode; 00247 DWORD WriteConOutNumBytesTemp; 00248 00249 PVOID lpCookedReadData; // Same as PCOOKED_READ_DATA 00250 00251 PVOID EudcInformation; // Same as PEUDC_INFORMATION 00252 00253 PVOID FontCacheInformation; // Same as PFONT_CACHE_INFORMATION 00254 00255 #if defined(FE_IME) 00256 CONSOLE_IME_INFORMATION ConsoleIme; 00257 #endif // FE_IME 00258 00259 HDC FonthDC; // Double colored DBCS hDC 00260 HBITMAP hBitmap; 00261 #if defined(i386) 00262 SMALL_RECT Os2SavedWindowRect; 00263 #endif 00264 BOOLEAN fVDMVideoMode; // FALSE : VGA Format 00265 // TRUE : Common LVB Format 00266 BOOLEAN fIsDBCSCP; 00267 BOOLEAN fIsDBCSOutputCP; 00268 00269 #endif 00270 } CONSOLE_INFORMATION, *PCONSOLE_INFORMATION; 00271 00272 // 00273 // CtrlFlags definitions 00274 // 00275 00276 #define CONSOLE_CTRL_C_FLAG 1 00277 #define CONSOLE_CTRL_BREAK_FLAG 2 00278 #define CONSOLE_CTRL_CLOSE_FLAG 4 00279 #define CONSOLE_FORCE_SHUTDOWN_FLAG 8 00280 #define CONSOLE_CTRL_LOGOFF_FLAG 16 00281 #define CONSOLE_CTRL_SHUTDOWN_FLAG 32 00282 00283 #define ADD_SCROLL_BARS_X 0x1 00284 #define REMOVE_SCROLL_BARS_X 0x2 00285 #define ADD_SCROLL_BARS_Y 0x4 00286 #define REMOVE_SCROLL_BARS_Y 0x8 00287 #define RESIZE_SCROLL_BARS 0x10 00288 #define SCROLL_BAR_CHANGE (ADD_SCROLL_BARS_X | REMOVE_SCROLL_BARS_X | ADD_SCROLL_BARS_Y | REMOVE_SCROLL_BARS_Y | RESIZE_SCROLL_BARS) 00289 #define BORDER_CHANGE 0x20 00290 #define SCREEN_BUFFER_CHANGE 0x40 00291 00292 #define CONSOLE_INITIAL_IO_HANDLES 3 00293 #define CONSOLE_IO_HANDLE_INCREMENT 3 00294 00295 #define CONSOLE_FREE_HANDLE 0 00296 //#define CONSOLE_INPUT_HANDLE 1 00297 //#define CONSOLE_OUTPUT_HANDLE 2 00298 #define CONSOLE_GRAPHICS_OUTPUT_HANDLE 4 00299 #define CONSOLE_INHERITABLE 8 00300 #define CONSOLE_ANY_HANDLE ((ULONG)(-1)) 00301 00302 // 00303 // input handle flags 00304 // 00305 00306 #define HANDLE_CLOSING 1 00307 #define HANDLE_INPUT_PENDING 2 00308 #define HANDLE_MULTI_LINE_INPUT 4 00309 00310 typedef struct _HANDLE_DATA { 00311 ULONG HandleType; 00312 ACCESS_MASK Access; 00313 ULONG ShareAccess; 00314 union { 00315 PSCREEN_INFORMATION ScreenBuffer; 00316 PINPUT_INFORMATION InputBuffer; 00317 } Buffer; 00318 PINPUT_READ_HANDLE_DATA InputReadData; // used only by input reads 00319 } HANDLE_DATA, *PHANDLE_DATA; 00320 00321 typedef struct _CONSOLE_PER_PROCESS_DATA { 00322 HANDLE ConsoleHandle; 00323 HANDLE_DATA HandleTable[CONSOLE_INITIAL_IO_HANDLES]; 00324 ULONG HandleTableSize; 00325 ULONG Foo; 00326 PHANDLE_DATA HandleTablePtr; 00327 BOOLEAN ConsoleApp; 00328 BOOLEAN RootProcess; 00329 #if defined(FE_IME) 00330 HDESK hDesk; 00331 HWINSTA hWinSta; 00332 #endif 00333 } CONSOLE_PER_PROCESS_DATA, *PCONSOLE_PER_PROCESS_DATA; 00334 00335 #define CONSOLE_INITIAL_CONSOLES 10 00336 #define CONSOLE_CONSOLE_HANDLE_INCREMENT 5 00337 #define CONSOLE_HANDLE_ALLOCATED 1 00338 00339 #define INDEX_TO_HANDLE(INDEX) ((HANDLE)(((ULONG_PTR)INDEX << 2) | CONSOLE_HANDLE_SIGNATURE)) 00340 #define HANDLE_TO_INDEX(CONHANDLE) ((HANDLE)((ULONG_PTR)CONHANDLE >> 2)) 00341 00342 #define INPUT_MODES (ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT) 00343 #define OUTPUT_MODES (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT) 00344 #define PRIVATE_MODES (ENABLE_INSERT_MODE | ENABLE_QUICK_EDIT_MODE | ENABLE_PRIVATE_FLAGS) 00345 00346 #define CURSOR_PERCENTAGE_TO_TOP_SCAN_LINE(FONTSIZE,PERCENTAGE) ((FONTSIZE) - ((FONTSIZE) * (PERCENTAGE) / 100)) 00347 00348 #define ConsoleLocked(CONSOLEPTR) (((CONSOLEPTR)->ConsoleLock.OwningThread) == NtCurrentTeb()->ClientId.UniqueThread) 00349 00350 #define CONSOLE_STATUS_WAIT ((NTSTATUS)0xC0030001L) 00351 #define CONSOLE_STATUS_READ_COMPLETE ((NTSTATUS)0xC0030002L) 00352 #define CONSOLE_STATUS_WAIT_NO_BLOCK ((NTSTATUS)0xC0030003L) 00353 00354 #define CM_CREATE_CONSOLE_WINDOW (WM_USER+0) 00355 #define CM_DESTROY_WINDOW (WM_USER+1) 00356 #define CM_SET_WINDOW_SIZE (WM_USER+2) 00357 #define CM_BEEP (WM_USER+3) 00358 #define CM_UPDATE_SCROLL_BARS (WM_USER+4) 00359 #define CM_UPDATE_TITLE (WM_USER+5) 00360 // 00361 // CM_MODE_TRANSITION is hard-coded to WM_USER+6 in kernel\winmgr.c 00362 // 00363 #define CM_MODE_TRANSITION (WM_USER+6) 00364 #define CM_CONSOLE_SHUTDOWN (WM_USER+7) 00365 #define CM_HIDE_WINDOW (WM_USER+8) 00366 #if defined(FE_IME) 00367 #define CM_CONIME_CREATE (WM_USER+9) 00368 #define CM_SET_CONSOLEIME_WINDOW (WM_USER+10) 00369 #define CM_WAIT_CONIME_PROCESS (WM_USER+11) 00370 #define CM_SET_IME_CODEPAGE (WM_USER+12) 00371 #define CM_SET_NLSMODE (WM_USER+13) 00372 #define CM_GET_NLSMODE (WM_USER+14) 00373 #define CM_CONIME_KL_ACTIVATE (WM_USER+15) 00374 #endif 00375 #define CM_CONSOLE_MSG (WM_USER+16) 00376 #define CM_CONSOLE_INPUT_THREAD_MSG (WM_USER+17) 00377 00378 #define CONSOLE_CLIENTTHREADHANDLE(pcsrthread) ((pcsrthread)->ThreadHandle) 00379 00380 #define CONSOLE_CLIENTPROCESSHANDLE() \ 00381 ((CSR_SERVER_QUERYCLIENTTHREAD())->Process->ProcessHandle) 00382 00383 #define CONSOLE_CLIENTPROCESSID() \ 00384 ((CSR_SERVER_QUERYCLIENTTHREAD())->Process->ClientId.UniqueProcess) 00385 00386 #define CONSOLE_FROMPROCESSPROCESSHANDLE(pcsrprocess) \ 00387 ((pcsrprocess)->ProcessHandle) 00388 00389 #define CONSOLE_FROMPROCESSPERPROCESSDATA(pcsrprocess) \ 00390 ((pcsrprocess)->ServerDllPerProcessData[CONSRV_SERVERDLL_INDEX]) 00391 00392 #define CONSOLE_FROMTHREADPERPROCESSDATA(pcsrthread) \ 00393 CONSOLE_FROMPROCESSPERPROCESSDATA((pcsrthread)->Process) 00394 00395 #define CONSOLE_PERPROCESSDATA() \ 00396 CONSOLE_FROMTHREADPERPROCESSDATA(CSR_SERVER_QUERYCLIENTTHREAD()) 00397 00398 #define CONSOLE_GETCONSOLEAPP() (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleApp) 00399 #define CONSOLE_GETCONSOLEAPPFROMPROCESSDATA(PROCESSDATA) ((PROCESSDATA)->ConsoleApp) 00400 #define CONSOLE_SETCONSOLEAPP(VALUE) (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleApp = VALUE) 00401 #define CONSOLE_SETCONSOLEAPPFROMPROCESSDATA(PROCESSDATA,VALUE) ((PROCESSDATA)->ConsoleApp = VALUE) 00402 00403 #define CONSOLE_GETCONSOLEHANDLE() (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleHandle) 00404 #define CONSOLE_SETCONSOLEHANDLE(VALUE) (((PCONSOLE_PER_PROCESS_DATA)CONSOLE_PERPROCESSDATA())->ConsoleHandle = VALUE) 00405 #define CONSOLE_GETCONSOLEHANDLEFROMPROCESSDATA(PROCESSDATA) ((PROCESSDATA)->ConsoleHandle) 00406 #define CONSOLE_SETCONSOLEHANDLEFROMPROCESSDATA(PROCESSDATA,VALUE) ((PROCESSDATA)->ConsoleHandle = VALUE) 00407 00408 #endif 00409 00410 // 00411 // registry information structure 00412 // 00413 00414 typedef struct _CONSOLE_REGISTRY_INFO { 00415 COORD ScreenBufferSize; 00416 COORD WindowSize; 00417 COORD WindowOrigin; 00418 COORD FontSize; 00419 UINT FontFamily; 00420 UINT FontWeight; 00421 WCHAR FaceName[LF_FACESIZE]; 00422 UINT CursorSize; 00423 BOOL FullScreen; 00424 BOOL QuickEdit; 00425 BOOL InsertMode; 00426 BOOL AutoPosition; 00427 CHAR_INFO ScreenFill; 00428 CHAR_INFO PopupFill; 00429 UINT HistoryBufferSize; 00430 UINT NumberOfHistoryBuffers; 00431 BOOL HistoryNoDup; 00432 COLORREF ColorTable[ 16 ]; 00433 LONGLONG LastWriteTime; 00434 #if defined(FE_SB) // scotthsu 00435 DWORD CodePage; 00436 #endif 00437 } CONSOLE_REGISTRY_INFO, *PCONSOLE_REGISTRY_INFO; 00438 00439 00440 // 00441 // window class 00442 // 00443 00444 #define CONSOLE_WINDOW_CLASS (L"ConsoleWindowClass") 00445 00446 #define CONSOLE_MAX_APP_SHORTCUTS 1 00447 00448 // 00449 // this structure is used to store relevant information from the 00450 // console for ctrl processing so we can do it without holding the 00451 // console lock. 00452 // 00453 00454 typedef struct _CONSOLE_PROCESS_TERMINATION_RECORD { 00455 HANDLE ProcessHandle; 00456 ULONG TerminateCount; 00457 BOOL bDebugee; 00458 LPTHREAD_START_ROUTINE CtrlRoutine; 00459 } CONSOLE_PROCESS_TERMINATION_RECORD, *PCONSOLE_PROCESS_TERMINATION_RECORD; 00460 00461 // 00462 // this value is used to determine the size of stack buffers for 00463 // strings. it should be long enough to contain the width of a 00464 // normal screen buffer. 00465 // 00466 00467 #define STACK_BUFFER_SIZE 132 00468 00469 // 00470 // link information 00471 // 00472 00473 00474 #define LINK_PROP_MAIN_SIG 0x00000001 00475 #define LINK_PROP_NT_CONSOLE_SIG 0x00000002 00476 00477 #if 0 // no one currently uses this... 00478 typedef struct { 00479 00480 WCHAR pszLinkName[ MAX_PATH ]; 00481 WCHAR pszName[ MAX_PATH ]; 00482 WCHAR pszRelPath[ MAX_PATH ]; 00483 WCHAR pszWorkingDir[ MAX_PATH ]; 00484 WCHAR pszArgs[ MAX_PATH ]; 00485 WCHAR pszIconLocation[ MAX_PATH ]; 00486 int iIcon; 00487 int iShowCmd; 00488 int wHotKey; 00489 00490 } LNKPROPMAIN, * LPLNKPROPMAIN; 00491 #endif 00492 00493 #ifndef _USERKDX_ /* debugging extensions */ 00494 typedef struct { 00495 00496 WCHAR pszName[ MAX_PATH ]; 00497 WCHAR pszIconLocation[ MAX_PATH ]; 00498 UINT uIcon; 00499 UINT uShowCmd; 00500 UINT uHotKey; 00501 NT_CONSOLE_PROPS console_props; 00502 #ifdef FE_SB 00503 NT_FE_CONSOLE_PROPS fe_console_props; 00504 #endif 00505 00506 00507 } LNKPROPNTCONSOLE, *LPLNKPROPNTCONSOLE; 00508 #endif 00509 00510 #ifndef _USERKDX_ /* debugging extensions */ 00511 typedef struct { 00512 LPWSTR pszCurFile; // current file from IPersistFile 00513 LPWSTR pszRelSource; // overrides pszCurFile in relative tracking 00514 00515 LPWSTR pszName; // title on short volumes 00516 LPWSTR pszRelPath; 00517 LPWSTR pszWorkingDir; 00518 LPWSTR pszArgs; 00519 LPWSTR pszIconLocation; 00520 00521 LPSTR pExtraData; // extra data to preserve for future compatibility 00522 00523 SHELL_LINK_DATA sld; 00524 } CShellLink; 00525 #endif 00526

Generated on Sat May 15 19:41:48 2004 for test by doxygen 1.3.7