Changeset 828 for trunk/dll/killproc.c


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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.