第一部分:
kd> kc
USER32!InternalCallWinProc
USER32!UserCallDlgProcCheckWow
USER32!DefDlgProcWorker
USER32!SendMessageWorker
USER32!InternalCreateDialog
USER32!InternalDialogBox
USER32!DialogBoxIndirectParamAorW
USER32!DialogBoxIndirectParamW
USER32!DialogBoxIndirectParamW_wrapper
comdlg32!NewGetFileName
comdlg32!NewGetSaveFileName
comdlg32!GetFileName
comdlg32!GetSaveFileNameW
NOTEPAD!NPCommand
NOTEPAD!NPWndProc
USER32!InternalCallWinProc
USER32!UserCallWinProcCheckWow
USER32!DispatchClientMessage
USER32!__fnDWORD
ntdll!KiUserCallbackDispatcher
nt!KiCallUserMode
nt!KeUserModeCallback
win32k!SfnDWORD
win32k!xxxSendMessageToClient
win32k!xxxSendMessageTimeout
win32k!xxxSendMessage
win32k!xxxTranslateAccelerator
win32k!NtUserTranslateAccelerator
nt!_KiSystemService
SharedUserData!SystemCallStub
ntdll!KiUserCallbackDispatcher
USER32!NtUserTranslateAccelerator
NOTEPAD!WinMain
NOTEPAD!WinMainCRTStartup
kernel32!BaseProcessStart
第二部分:
??????????? //
// Do common dialog to save file
//
??????????? if (GetSaveFileName(&OFN))
{
第三部分:
/* ** Notepad command proc - called whenever notepad gets WM_COMMAND
message.? wParam passed as cmd */
INT NPCommand(
HWND???? hwnd,
WPARAM?? wParam,
LPARAM?? lParam )
{
HWND???? hwndFocus;
LONG???? lSel;
TCHAR??? szNewName[MAX_PATH] = TEXT("");????? /* New file name */
FARPROC? lpfn;
LONG???? style;
DWORD??? rc;
RECT???? rcClient;
??? switch (LOWORD(wParam))
{
??????? case M_SAVEAS:
??????????? OFN.lpstrFile?????? = szNewName;
OFN.lpstrTitle????? = szSaveCaption;
/* Added OFN_PATHMUSTEXIST to eliminate problems in SaveFile.
* 12 February 1991??? clarkc
*/
OFN.Flags = OFN_HIDEREADONLY???? | OFN_OVERWRITEPROMPT |
OFN_NOREADONLYRETURN | OFN_PATHMUSTEXIST?? |
OFN_EXPLORER???????? |
OFN_ENABLESIZING???? |
OFN_ENABLETEMPLATE?? | OFN_ENABLEHOOK;
??????????? OFN.lpTemplateName= TEXT("NpEncodingDialog");
OFN.lpfnHook= NpSaveDialogHookProc;
??????????? /* ALL non-zero long pointers must be defined immediately
* before the call, as the DS might move otherwise.
* 12 February 1991??? clarkc
*/
OFN.lpstrFilter?????? = szSaveFilterSpec;
OFN.lpstrDefExt?????? = TEXT("txt");
??????????? if (!fUntitled)
{
lstrcpyn(szNewName, szFileName, MAX_PATH); /* set default selection */
}
else
{
lstrcpy (szNewName, TEXT("*.txt") );
}
??????????? fInSaveAsDlg = TRUE;
??????????? OFN.nFilterIndex= FILE_TEXT;
??????????? //
// Do common dialog to save file
//
??????????? if (GetSaveFileName(&OFN))
{