Changeset 828


Ignore:
Timestamp:
Sep 3, 2007, 4:02:12 AM (18 years ago)
Author:
Gregg Young
Message:

Add DosQuerySysState as option for getting process info for kill process and Datamin

Location:
trunk/dll
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/datamin.c

    r793 r828  
    2020  30 Mar 07 GKY Remove GetPString for window class names
    2121  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     22  02 Sep 07 GKY Replaced DosQProcStatus with DosQuerySysState to fix trap in thunk code
    2223
    2324***********************************************************************/
     
    796797  case UM_SETUP5:                       // Process status
    797798    {
    798       CHAR s[134], tm[38], szQty[38];
    799 
    800       if (fUseQProcStat && !noqproc) {
     799     CHAR s[134], tm[38], szQty[38];
     800
     801     if (fUseQProcStat && !noqproc) {
    801802
    802803        PROCESSINFO *ppi;
     
    837838        }
    838839      }
     840      else if (fUseQSysState && !noqproc) {
     841
     842        QSPREC *ppi;
     843        QSPTRREC *pbh = NULL;
     844        QSLREC *pmi;
     845        ULONG numprocs = 0, numthreads = 0;
     846        APIRET rc;
     847
     848        rc = DosAllocMem((PVOID) & pbh, USHRT_MAX + 4096,
     849                         PAG_COMMIT | OBJ_TILE | PAG_READ | PAG_WRITE);
     850        if (rc)
     851          Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__,
     852                    GetPString(IDS_OUTOFMEMORY));
     853        else { //2 Sep 07 GKY 0x05 = process & Mod data only
     854          if (DosQuerySysState(QS_PROCESS | QS_MTE, 0, 0, 0, pbh, USHRT_MAX))
     855            noqproc = TRUE;
     856          else {
     857            ppi = pbh->pProcRec;
     858            while (ppi->RecType == 1) {
     859              pmi = pbh->pLibRec;
     860              while (pmi && ppi->hMte != pmi->hmte)
     861                pmi = pmi->pNextRec;
     862              if (pmi) {
     863                numprocs++;
     864                numthreads += ppi->cTCB;
     865              }
     866              ppi = (QSPREC *) (ppi->pThrdRec + ppi->cTCB);
     867            }
     868            commafmt(szQty, sizeof(szQty), numprocs);
     869            commafmt(tm, sizeof(tm), numthreads);
     870            sprintf(s,
     871                    " %s%s  %s%s",
     872                    GetPString(IDS_PROCSTITLETEXT),
     873                    szQty, GetPString(IDS_THRDSTITLETEXT), tm);
     874            WinSetDlgItemText(hwnd, MINI_PROC, s);
     875          }
     876          DosFreeMem(pbh);
     877        }
     878      }
    839879      else {
    840880        commafmt(szQty, sizeof(szQty),
  • trunk/dll/fm3dlg.h

    r796 r828  
    521521#define KILL_SHOW                                                                                       23104
    522522#define KILL_HDR                                                                                                23105
     523#define KILL2_CHECKBOX                                                                  23106
    523524
    524525#define UNDEL_FRAME                                                                             23200
  • trunk/dll/fm3dll.def

    r820 r828  
    1111
    1212import DOSQPROCSTATUS DOSCALLS.154
     13#       DOSQUERYSYSSTATE DOSCALLS.368
    1314
    1415export    InitFM3DLL_                                 .1,
  • trunk/dll/fm3dll.h

    r826 r828  
    13711371  fNoIconsFiles, fNoIconsDirs, fVerify, fDCOpens,
    13721372  fLinkSetsIcon, fSaveState, fTextTools, fCopyDefault,
    1373   fToolTitles, fLogFile, fRealIdle, fNoSaveState,
     1373  fToolTitles, fLogFile, fRealIdle, fNoSaveState, fUseQSysState,
    13741374  fSplitStatus, fArcStuffVisible, fUseMCI, fAmAV2,
    13751375  fNoTreeGap, fDummy, fVTreeOpensWPS, fUseQProcStat,
  • trunk/dll/fm3res.dlg

    r796 r828  
    930930        PUSHBUTTON      "Cancel", DID_CANCEL, 194, 4, 40, 14,
    931931                        BS_NOPOINTERFOCUS
    932         AUTOCHECKBOX    "~Use undocumented DosQProcStat API", KILL_CHECKBOX,
    933                         30, 20, 178, 10
     932        AUTOCHECKBOX    "~Use DosQProcStat 16 bit API (thunk)", KILL_CHECKBOX,
     933                        20, 20, 118, 10, WS_GROUP
     934        AUTOCHECKBOX    "~Use DosQSysState 32 bit API ", KILL2_CHECKBOX,
     935                        140, 20, 108, 10
    934936        LTEXT           "PID: Name:", KILL_HDR, 6, 156, 86, 8, DT_VCENTER
    935937                        PRESPARAMS PP_FONTNAMESIZE, "10.System Monospaced"
  • trunk/dll/init.c

    r827 r828  
    10561056  size = sizeof(BOOL);
    10571057  PrfQueryProfileData(fmprof, FM3Str, "UseQProcStat",
    1058                       &fUseQProcStat, &size);
     1058                      &fUseQProcStat, &size);
     1059  size = sizeof(BOOL);
     1060  PrfQueryProfileData(fmprof, FM3Str, "UseQSysState",
     1061                      &fUseQSysState, &size);
    10591062  size = sizeof(BOOL);
    10601063  PrfQueryProfileData(fmprof, FM3Str, "DataMin", &fDataMin, &size);
  • trunk/dll/killproc.c

    r793 r828  
    1616  06 Aug 07 GKY Reduce DosSleep times (ticket 148)
    1717  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
     18  02 Sep 07 GKY Replaced DosQProcStatus with DosQuerySysState to fix trap in thunk code
    1819
    1920
     
    3334#include <limits.h>
    3435
    35 #include "procstat.h"
    3636#include "fm3dll.h"
    3737#include "fm3dlg.h"
    3838#include "fm3str.h"
     39#include "procstat.h"
    3940
    4041#pragma data_seg(DATA2)
     
    134135}
    135136
     137static VOID FillKillListThread3(VOID * arg)
     138{
     139  HWND hwnd = *(HWND *) arg;
     140  CHAR s[1036];
     141  HAB thab;
     142  HMQ thmq;
     143  INT rc;
     144  QSPREC *ppi;
     145  QSPTRREC *pbh;
     146  QSLREC *pmi;
     147
     148  thab = WinInitialize(0);
     149  thmq = WinCreateMsgQueue(thab, 0);
     150  WinCancelShutdown(thmq, TRUE);
     151  IncrThreadUsage();
     152
     153  WinSendDlgItemMsg(hwnd, KILL_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
     154  rc = DosAllocMem((PVOID) & pbh, USHRT_MAX + 4096,
     155                   PAG_COMMIT | OBJ_TILE | PAG_READ | PAG_WRITE);
     156  if (rc)
     157    Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
     158              GetPString(IDS_OUTOFMEMORY));
     159  else {
     160    rc = DosQuerySysState(QS_PROCESS | QS_MTE, 0, 0, 0, pbh, USHRT_MAX);
     161    if (!rc) {
     162      ppi = pbh->pProcRec;
     163      while (ppi->RecType == 1) {
     164        if (ppi->pid != mypid) {
     165          pmi = pbh->pLibRec;
     166          while (pmi && ppi->hMte != pmi->hmte)
     167            pmi = pmi->pNextRec;
     168          if (pmi) {
     169            sprintf(s, "%04x ", ppi->pid);
     170            if (!stricmp((CHAR *) pmi->pName, "SYSINIT"))
     171              GetDosPgmName(ppi->pid, s + strlen(s));
     172            else {
     173              if (*pmi->pName)
     174                strcat(s, (CHAR *) pmi->pName);
     175              else
     176                strcat(s, GetPString(IDS_UNKNOWNPROCTEXT));
     177            }
     178            if (WinIsWindow(thab, hwnd)) {
     179              WinSendDlgItemMsg(hwnd, KILL_LISTBOX, LM_INSERTITEM,
     180                                MPFROM2SHORT(LIT_SORTASCENDING, 0),
     181                                MPFROMP(s));
     182            }
     183            else
     184              break;
     185          }
     186        }
     187        ppi = (QSPREC *) (ppi->pThrdRec + ppi->cTCB);
     188      }                                 // while
     189    }
     190    DosFreeMem(pbh);
     191  }
     192
     193  if (WinIsWindow(thab, hwnd))
     194    PostMsg(hwnd, UM_CONTAINER_FILLED, MPVOID, MPVOID);
     195  WinDestroyMsgQueue(thmq);
     196  DecrThreadUsage();
     197  WinTerminate(thab);
     198}
     199
    136200static VOID FillKillListThread(VOID * arg)
    137201{
     
    241305    WinDefDlgProc(hwnd, WM_SETICON, MPFROMLONG(hptrIcon), MPVOID);
    242306    WinCheckButton(hwnd, KILL_CHECKBOX, fUseQProcStat);
     307    WinCheckButton(hwnd, KILL2_CHECKBOX, fUseQSysState);
     308    if (WinQueryButtonCheckstate(hwnd, KILL2_CHECKBOX)) {
     309      WinCheckButton(hwnd, KILL_CHECKBOX, FALSE);
     310      WinEnableWindow(WinWindowFromID(hwnd, KILL_CHECKBOX), FALSE);
     311    }
     312    if (WinQueryButtonCheckstate(hwnd, KILL_CHECKBOX)) {
     313      WinCheckButton(hwnd, KILL2_CHECKBOX, FALSE);
     314      WinEnableWindow(WinWindowFromID(hwnd, KILL2_CHECKBOX), FALSE);
     315    }
    243316    PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(KILL_RESCAN, 0), MPVOID);
    244317    break;
     
    267340      PrfWriteProfileData(fmprof,
    268341                          FM3Str,
    269                           "UseQProcStat", &fUseQProcStat, sizeof(BOOL));
     342                          "UseQProcStat", &fUseQProcStat, sizeof(BOOL));
    270343      PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(KILL_RESCAN, 0), MPVOID);
     344      if (WinQueryButtonCheckstate(hwnd, KILL_CHECKBOX)) {
     345        WinCheckButton(hwnd, KILL2_CHECKBOX, FALSE);
     346        WinEnableWindow(WinWindowFromID(hwnd, KILL2_CHECKBOX), FALSE);
     347      }
     348      else
     349        WinEnableWindow(WinWindowFromID(hwnd, KILL2_CHECKBOX), TRUE);
     350      break;
     351    case KILL2_CHECKBOX:
     352      fUseQSysState = WinQueryButtonCheckstate(hwnd, KILL2_CHECKBOX);
     353      PrfWriteProfileData(fmprof,
     354                          FM3Str,
     355                          "UseQSysState", &fUseQSysState, sizeof(BOOL));
     356      PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(KILL_RESCAN, 0), MPVOID);
     357      if (WinQueryButtonCheckstate(hwnd, KILL2_CHECKBOX)) {
     358        WinCheckButton(hwnd, KILL_CHECKBOX, FALSE);
     359        WinEnableWindow(WinWindowFromID(hwnd, KILL_CHECKBOX), FALSE);
     360      }
     361      else
     362        WinEnableWindow(WinWindowFromID(hwnd, KILL_CHECKBOX), TRUE);
    271363      break;
    272364
     
    322414          DosSleep(100);//05 Aug 07 GKY 250
    323415        else
    324           WinDismissDlg(hwnd, 0);
    325       }
     416            WinDismissDlg(hwnd, 0);
     417      }
     418      else if (fUseQSysState)
     419        if (_beginthread(FillKillListThread3,
     420                         NULL, 65536, (PVOID) & hwnd) != -1)
     421          DosSleep(100);//05 Aug 07 GKY 250
     422        else
     423            WinDismissDlg(hwnd, 0);
    326424      else {
    327425        if (_beginthread(FillKillListThread,
     
    408506
    409507#pragma alloc_text(KILLPROC,FillKillListThread,FillKillListThread2,GetDosPgmName,KillDlgProc)
     508#pragma alloc_text(KILLPROC,FillKillListThread)
Note: See TracChangeset for help on using the changeset viewer.