Annotation of mstools/samples/sdktools/netwatch/net.c, revision 1.1.1.2

1.1       root        1: /*
                      2:  *  net.c
                      3:  *  
                      4:  *  Purpose:
                      5:  *      net functions
                      6:  *  
                      7:  *  Owner:
                      8:  *      MikeSart
                      9:  */
                     10: #define UNICODE 1
                     11: 
                     12: #include <windows.h>
                     13: #include <windowsx.h>
                     14: #include <string.h>
                     15: #include <time.h>
                     16: #include <lm.h>
                     17: #include "netwatch.h"
                     18: #include "rcids.h"
                     19: 
                     20: typedef struct
                     21: {
                     22:     DWORD   dwType;
                     23:     DWORD   dwData;
                     24:     TCHAR   rgsz[];
                     25: } LBDATA;
                     26: 
                     27: // in datetime.c
                     28: TCHAR       *PutTime(time_t tm_t, TCHAR *szStr);
                     29: TCHAR       *PutDate(time_t tm_t, TCHAR *szStr);
                     30: TCHAR       *PutCounterTime(DWORD dw, TCHAR *szStr);
                     31: 
                     32: // variables
                     33: TCHAR       *szFmtLB[LBITEM_NUMITEMS];
                     34: 
                     35: // returns TRUE - error
                     36: // if it fails initing, you should still call
                     37: // InitNetWatch(FALSE) to clean up
                     38: BOOL
                     39: InitNetWatch(BOOL fInit)
                     40: {
                     41:     DWORD   dwT;
                     42:     TCHAR   *szCommandLine;
                     43:     BOOL    fError = FALSE;
                     44: 
                     45:     if(fInit)
                     46:     {
                     47:         szAppName = AllocAndLoadString(IDS_APPNAME);
                     48:         if(!szAppName)
                     49:             fError = TRUE;
                     50: 
                     51:         // load formatting info for each listbox item
                     52:         for(dwT = 0; dwT < LBITEM_NUMITEMS; dwT++)
                     53:         {
                     54:             szFmtLB[dwT] = AllocAndLoadString(IDS_FMTLB + dwT);
                     55:             if(!szFmtLB[dwT])
                     56:                 fError = TRUE;
                     57:         }
                     58: 
                     59:         if(szCommandLine = GetCommandLine())
                     60:         {
1.1.1.2 ! root       61:             if(*szCommandLine == '\"') 
        !            62:             {
        !            63:                 /*
        !            64:                  * Scan, and skip over, subsequent characters until
        !            65:                  * another double-quote or a null is encountered.
        !            66:                  */
        !            67:                 while(*++szCommandLine && (*szCommandLine != '\"'))
        !            68:                     ;
        !            69: 
        !            70:                 /*
        !            71:                  * If we stopped on a double-quote (usual case), skip
        !            72:                  * over it.
        !            73:                  */
        !            74:                 if(*szCommandLine == '\"')
        !            75:                     szCommandLine++;
        !            76:             }
        !            77:             else 
        !            78:             {
        !            79:                 while(*szCommandLine > ' ')
        !            80:                     szCommandLine++;
        !            81:             }
        !            82: 
        !            83:             /*
        !            84:              * Skip past any white space preceeding the second token.
        !            85:              */
        !            86:             while (*szCommandLine && (*szCommandLine <= ' ')) 
        !            87:             {
        !            88:                 szCommandLine++;
        !            89:             }
        !            90: 
        !            91: #ifdef NEVER
1.1       root       92:             // skip first arg (our exe name)
                     93:             while(*szCommandLine && (*szCommandLine != ' '))
                     94:                 szCommandLine++;
                     95: 
                     96:             // skip spaces
                     97:             while(*szCommandLine && (*szCommandLine == ' '))
                     98:                 szCommandLine++;
1.1.1.2 ! root       99: #endif
1.1       root      100: 
                    101:             if(*szCommandLine)
                    102:             {
                    103:                 if(lstrlen(szCommandLine) > UNCLEN)
                    104:                     szCommandLine[UNCLEN] = '\0';
                    105:                 if(!(szServerName = GlobalAllocPtr(GHND,
                    106:                     (lstrlen(szCommandLine) + 3) * sizeof(TCHAR))))
                    107:                         fError = TRUE;
                    108:                 else
                    109:                 {
                    110:                     if(szCommandLine[0] != '\\')
                    111:                     {
                    112:                         szServerName[0] = szServerName[1] = '\\';
                    113:                         lstrcpy(&szServerName[2], szCommandLine);
                    114:                     }
                    115:                     else
                    116:                     {
                    117:                         lstrcpy(szServerName, szCommandLine);
                    118:                     }
                    119:                 }
                    120:             }
                    121:         }
                    122:         return fError;
                    123:     }
                    124: 
                    125:     GlobalFreeNullPtr(szAppName);
                    126:     GlobalFreeNullPtr(szServerName);
                    127:     szAppName = szServerName = NULL;
                    128: 
                    129:     for(dwT = 0; dwT < LBITEM_NUMITEMS; dwT++)
                    130:     {
                    131:         GlobalFreeNullPtr(szFmtLB[dwT]);
                    132:         szFmtLB[dwT] = NULL;
                    133:     }
                    134: 
                    135:     return fError;
                    136: }
                    137: 
                    138: LBDATA *
                    139: AllocExtraData1(DWORD dwType, DWORD dwData, TCHAR *sz1)
                    140: {
                    141:     LBDATA  *plbitem;
                    142:     DWORD   cb;
                    143: 
                    144:     if(!sz1)
                    145:         sz1 = szNil;
                    146: 
                    147:     cb = sizeof(LBDATA) + ((wcslen(sz1) + 1) * sizeof(TCHAR));
                    148:     plbitem = (LBDATA *)GlobalAllocPtr(GHND, cb);
                    149:     if(plbitem)
                    150:     {
                    151:         plbitem->dwType = dwType;
                    152:         plbitem->dwData = dwData;
                    153: 
                    154:         wcscpy(plbitem->rgsz, sz1);
                    155:     }
                    156: 
                    157:     return plbitem;
                    158: }
                    159: 
                    160: LBDATA *
                    161: AllocExtraDataUser(DWORD dwType, DWORD dwData, TCHAR *szNetName, 
                    162:     TCHAR *szUserName, TCHAR *szShareName, TCHAR *szShareRemark)
                    163: {
                    164:     LBDATA  *plbitem;
                    165:     DWORD   cb;
                    166:     DWORD   cch1, cch2, cch3;
                    167:     DWORD   cch4 = 0;
                    168:     TCHAR   *szT;
                    169: 
                    170:     cch1 = wcslen(szNetName) + 1;
                    171:     cch2 = wcslen(szUserName) + 1;
                    172:     cch3 = wcslen(szShareName) + 1;
                    173:     if(szShareRemark && szShareRemark[0])
                    174:         cch4 = wcslen(szShareRemark) + 4; // for 'sharename (comment)' style
                    175: 
                    176:     cb = sizeof(LBDATA) + ((cch1 + cch2 + cch3 + cch4 + 2) * sizeof(TCHAR));
                    177:     plbitem = (LBDATA *)GlobalAllocPtr(GHND, cb);
                    178:     if(plbitem)
                    179:     {
                    180:         plbitem->dwType = dwType;
                    181:         plbitem->dwData = dwData;
                    182: 
                    183:         // add \\ to front of netname
                    184:         plbitem->rgsz[0] = plbitem->rgsz[1] = '\\';
                    185:         szT = wcscpy(plbitem->rgsz + 2, szNetName);
                    186:         szT = wcscpy(szT + cch1, szUserName);
                    187:         szT = wcscpy(szT + cch2, szShareName);
                    188:         if(cch4)
                    189:         {
                    190:             wcscat(szT, TEXT(" ("));
                    191:             wcscat(szT, szShareRemark);
                    192:             wcscat(szT, TEXT(")"));
                    193:         }
                    194:     }
                    195: 
                    196:     return plbitem;
                    197: }
                    198: 
                    199: BOOL
                    200: AddLBItem(HWND hwndLB, DWORD *pdwIndex, TCHAR *pszItem, DWORD dwData)
                    201: {
                    202:     DWORD           dwT;
                    203:     static TCHAR    szCurrentItem[256];
                    204:     register DWORD  dwIndex = *pdwIndex;
                    205: 
                    206:     // if the current item matches, just set the data
                    207:     if((ListBox_GetText(hwndLB, dwIndex, szCurrentItem) != LB_ERR) &&
                    208:         (!wcscmp(szCurrentItem, pszItem)))
                    209:     {
                    210:         GlobalFreeNullPtr((LPVOID)ListBox_GetItemData(hwndLB, dwIndex));
                    211:         goto SetData;
                    212:     }
                    213: 
                    214:     // if we found an exact match later, del everything up to that
                    215:     dwT = ListBox_FindStringExact(hwndLB, dwIndex, pszItem);
                    216:     if((dwT != LB_ERR) && (dwT > dwIndex))
                    217:     {
                    218:         DWORD dw;
                    219: 
                    220:         for(dw = dwIndex; dw < dwT; dw++)
                    221:         {
                    222:             GlobalFreeNullPtr((LPVOID)ListBox_GetItemData(hwndLB, dwIndex));
                    223:             ListBox_DeleteString(hwndLB, dwIndex);
                    224:         }
                    225: 
                    226:         GlobalFreeNullPtr((LPVOID)ListBox_GetItemData(hwndLB, dwIndex));
                    227:         goto SetData;
                    228:     }
                    229: 
                    230:     // ok, it's a new string, insert it
                    231:     ListBox_InsertString(hwndLB, dwIndex, pszItem);
                    232: 
                    233: SetData:
                    234:     ListBox_SetItemData(hwndLB, dwIndex, dwData);
                    235:     (*pdwIndex)++;
                    236: 
                    237:     return TRUE;
                    238: }
                    239: 
                    240: NET_API_STATUS
                    241: FilesEnum(HWND hwndLB, DWORD *pdwIndex, TCHAR *sharename, 
                    242:     TCHAR *username, TCHAR *sharepath)
                    243: {
                    244:     FILE_INFO_3     *fi3 = NULL;
                    245:     NET_API_STATUS  nas;
                    246:     DWORD           dwentriesread;
                    247:     DWORD           dwtotalentries;
1.1.1.2 ! root      248:     TCHAR           *psharepathend;
        !           249: 
        !           250:     // Reasoning: if you are passed c:\ as a sharepath, sometimes c: is opened
        !           251:     // as execute. But since we would be qualifying paths on c:\, it won't show
        !           252:     // c: as being open.  So - remove the last \ if it's there.
        !           253:     if(sharepath && sharepath[0])
        !           254:     {
        !           255:         psharepathend = sharepath + lstrlen(sharepath) - 1;
        !           256:         if(*psharepathend == TEXT('\\'))
        !           257:             *psharepathend = '\0';
        !           258:     }
1.1       root      259: 
                    260:     nas = NetFileEnum(szServerName, sharepath, username, 3,
                    261:         (LPBYTE *)&fi3, MAX_PREFERRED_LENGTH, 
                    262:         &dwentriesread, &dwtotalentries, NULL);
                    263:     if(nas)
                    264:         goto err;
                    265: 
                    266:     while(dwentriesread)
                    267:     {
                    268:         UINT    nBitmap = 4;    // assume read bitmap
                    269: 
                    270:         --dwentriesread;
                    271: 
                    272:         if((fi3[dwentriesread].fi3_permissions & PERM_FILE_WRITE) ||
                    273:             (fi3[dwentriesread].fi3_permissions & PERM_FILE_CREATE))
                    274:                 nBitmap = 3;
                    275: 
                    276:         wsprintf(szBuffer, szFmtLB[LBITEM_FILE], nBitmap,
                    277:             fi3[dwentriesread].fi3_pathname);
                    278: 
                    279:         AddLBItem(hwndLB, pdwIndex, szBuffer, (DWORD)AllocExtraData1(
                    280:             LBITEM_FILE, fi3[dwentriesread].fi3_id, username));
                    281:     }
                    282: 
                    283: err:
                    284:     NetApiBufferFree(fi3);
                    285:     if(nas)
                    286:         return nas | FILE_ENUM_ERROR;
                    287:     return nas;
                    288: }
                    289: 
                    290: NET_API_STATUS
                    291: UsersEnum(HWND hwndLB, DWORD *pdwIndex, TCHAR *sharename, TCHAR *sharepath, 
                    292:     TCHAR *shareremark, DWORD dwShareType)
                    293: {
                    294:     DWORD               dwentriesread;
                    295:     DWORD               dwtotalentries;
                    296:     CONNECTION_INFO_1   *ci1 = NULL;
                    297:     NET_API_STATUS      nas;
                    298: 
                    299:     nas = NetConnectionEnum(szServerName, sharename, 1, (LPBYTE *)&ci1,
                    300:         MAX_PREFERRED_LENGTH, &dwentriesread, &dwtotalentries,
                    301:         NULL);
                    302:     if(nas)
                    303:         goto err;
                    304: 
                    305:     dwNumUsers += dwentriesread;
                    306:     while(dwentriesread)
                    307:     {
                    308:         TCHAR *username;
                    309:         TCHAR *netname;
                    310: 
                    311:         --dwentriesread;
                    312: 
                    313:         username = ci1[dwentriesread].coni1_username;
                    314:         netname = ci1[dwentriesread].coni1_netname;
                    315:         if(!username || !username[0])
                    316:             username = szNil;
                    317:         else
                    318:             CharLower(username);
                    319:         if(!netname || !netname[0])
                    320:             netname = szNil;
                    321:         else
                    322:             CharUpper(netname);
                    323: 
                    324:         wsprintf(szBuffer, szFmtLB[LBITEM_USER], username, netname);
                    325: 
                    326:         AddLBItem(hwndLB, pdwIndex, szBuffer, (DWORD)AllocExtraDataUser(
                    327:             LBITEM_USER, dwShareType, netname, username, sharename, 
                    328:             shareremark));
                    329: 
                    330:         if(ci1[dwentriesread].coni1_num_opens &&
                    331:             unMenuFlags[IDM_SHOWFILES & 0xff] == MF_CHECKED && !nas)
                    332:                 nas = FilesEnum(hwndLB, pdwIndex, sharename, username,
                    333:                     sharepath);
                    334:     }
                    335: 
                    336: err:
                    337:     NetApiBufferFree(ci1);
                    338:     return nas;
                    339: }
                    340: 
                    341: void
                    342: RefreshDisplay(HWND hwnd)
                    343: {
                    344:     HWND            hwndLB = GetWindow(hwnd, GW_CHILD);
                    345:     SHARE_INFO_2    *shi2 = NULL;
                    346:     DWORD           dwIndex = 0;
                    347:     DWORD           dwentriesread;
                    348:     DWORD           dwtotalentries;
                    349:     DWORD           dwT;
                    350:     NET_API_STATUS  nas;
                    351:     INT             n;
                    352: 
                    353:     PunchTimer(FALSE);
                    354:     SetCursor(LoadCursor(NULL, IDC_WAIT));
                    355:     n = ListBox_GetCurSel(hwndLB);
                    356:     SetWindowRedraw(hwndLB, FALSE);
                    357:     dwNumUsers = 0;
                    358: 
                    359:     nas = NetShareEnum(szServerName, 2, (LPBYTE *)&shi2, 
                    360:         MAX_PREFERRED_LENGTH, &dwentriesread, &dwtotalentries, NULL);
                    361:     if(nas)
                    362:         goto err;
                    363: 
                    364:     while(dwentriesread)
                    365:     {
                    366:         TCHAR   *sharename;
                    367:         TCHAR   *shareremark;
                    368:         int     nBitmap = 0;    // assume normal directory share
                    369: 
                    370:         --dwentriesread;
                    371:         sharename = shi2[dwentriesread].shi2_netname;
                    372:         shareremark = shi2[dwentriesread].shi2_remark;
                    373: 
                    374:         if(!sharename)
                    375:             continue;
                    376:         if(!shareremark)
                    377:             shareremark = szNil;
                    378: 
                    379:         // skip hidden shares
                    380:         if((unMenuFlags[IDM_SHOWHIDDEN & 0xff] == MF_UNCHECKED) &&
                    381:             (sharename[lstrlen(sharename) - 1] == TEXT('$')))
                    382:                 continue;
                    383: 
                    384:         if(shi2[dwentriesread].shi2_type == STYPE_IPC)  // use IPC$ icon
                    385:             nBitmap = 8;
                    386:         if(shareremark[0])
                    387:         {
                    388:             wsprintf(szBuffer, szFmtLB[LBITEM_SHARE2],
                    389:                 nBitmap, sharename, shareremark);
                    390:         }
                    391:         else
                    392:         {
                    393:             wsprintf(szBuffer, szFmtLB[LBITEM_SHARE], nBitmap, sharename);
                    394:         }
                    395: 
                    396:         if((unMenuFlags[IDM_SHOWINUSE & 0xff] != MF_CHECKED) ||
                    397:             shi2[dwentriesread].shi2_current_uses)
                    398:         {
                    399:             AddLBItem(hwndLB, &dwIndex, szBuffer,
                    400:                 (DWORD)AllocExtraData1(LBITEM_SHARE, 0, sharename));
                    401:         }
                    402: 
                    403:         if(shi2[dwentriesread].shi2_current_uses)
                    404:         {
                    405:             if(!nas || (nas & FILE_ENUM_ERROR))
                    406:                 nas = UsersEnum(hwndLB, &dwIndex, sharename,
                    407:                     shi2[dwentriesread].shi2_path, shareremark, 
                    408:                     shi2[dwentriesread].shi2_type);
                    409:         }
                    410:     }
                    411: 
                    412: err:
                    413:     if(nas)
                    414:     {
                    415:         AddErrorStringToLB(nas);
                    416:         dwIndex++;
                    417:     }
                    418: 
                    419:     // delete extra strings dangling at the end
                    420:     while((dwT = ListBox_GetItemData(hwndLB, dwIndex)) != LB_ERR)
                    421:     {
                    422:         GlobalFreeNullPtr((LPVOID)dwT);
                    423:         ListBox_DeleteString(hwndLB, dwIndex);
                    424:     }
                    425: 
                    426:     if((ListBox_GetCurSel(hwndLB) == LB_ERR) && 
                    427:         (ListBox_SetCurSel(hwndLB, n) == LB_ERR))
                    428:             ListBox_SetCurSel(hwndLB, 0);
                    429: 
                    430:     SetWindowRedraw(hwndLB, TRUE);
                    431:     SetCursor(LoadCursor(NULL, IDC_ARROW));
                    432:     UpdateWindowText(hwnd, FALSE);
                    433:     NetApiBufferFree(shi2);
                    434:     PunchTimer(TRUE);
                    435: }
                    436: 
                    437: NET_API_STATUS
                    438: DisplayShareDetails(HWND hwnd, LBDATA *plbdata, WORD wAction)
                    439: {
                    440:     PROPERTIES      props;
                    441:     NET_API_STATUS  nas = 0;
                    442:     SHARE_INFO_2    *shi2 = NULL;
                    443:     TCHAR           szMaxUses[11];
                    444:     TCHAR           szMaxCurrent[11];
                    445: 
                    446:     nas = NetShareGetInfo(szServerName, plbdata->rgsz, 2, (LPBYTE *)&shi2);
                    447:     if(!nas && shi2)
                    448:     {
                    449:         props.rgIDSStart = IDS_SHAREPROPS;
                    450:         if(shi2->shi2_type == STYPE_IPC)
                    451:             props.dwrgBmp = 0xfffffff8;   // bitmap #8 for IPC$ netname
                    452:         else
                    453:             props.dwrgBmp = 0xfffffff0;   // bitmap #0 for folder netname
                    454: 
                    455:         props.rgsz[0] = shi2->shi2_netname;
                    456:         props.rgsz[1] = shi2->shi2_path;
                    457:         props.rgsz[2] = shi2->shi2_remark;
                    458:         if(shi2->shi2_max_uses == SHI_USES_UNLIMITED)
                    459:         {
                    460:             props.rgsz[3] = szFromIDS2(IDS_NOLIMIT);
                    461:         }
                    462:         else
                    463:         {
                    464:             wsprintf(szMaxUses, szFmtNum, shi2->shi2_max_uses);
                    465:             props.rgsz[3] = szMaxUses;
                    466:         }
                    467:         wsprintf(szMaxCurrent, szFmtNum, shi2->shi2_current_uses);
                    468:         props.rgsz[4] = szMaxCurrent;
                    469:         props.rgsz[5] = NULL;
                    470: 
                    471:         if(wAction == VK_DELETE)
                    472:         {
                    473:             // if no one is connected, nuke it, else confirm with user
                    474:             if(!(shi2->shi2_current_uses) ||
                    475:                 (MessageBox(hwnd, szFromIDS1(IDS_AREYOUSURE + LBITEM_SHARE), 
                    476:                 szAppName, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2) == 
                    477:                 IDYES))
                    478:             {
                    479:                 nas = NetShareDel(szServerName, plbdata->rgsz, 0);
                    480:             }
                    481:         }
                    482:         else
                    483:         {
                    484:             DialogBoxParam(ghInst, MAKEINTRESOURCE(DLG_PROPERTIES), 
                    485:                 hwnd, PropDlgProc, (LPARAM)&props);
                    486:         }
                    487:     }
                    488: 
                    489:     NetApiBufferFree(shi2);
                    490:     return nas;
                    491: }
                    492: 
                    493: NET_API_STATUS
                    494: DisplayFileDetails(HWND hwnd, LBDATA *plbdata, WORD wAction)
                    495: {
                    496:     PROPERTIES      props;
                    497:     NET_API_STATUS  nas;
                    498:     FILE_INFO_3     *fi3 = NULL;
                    499:     TCHAR           szNumLocks[11];
                    500:     UINT            nBitmap = 4;    // assume read bitmap
                    501: 
                    502:     nas = NetFileGetInfo(szServerName, plbdata->dwData, 3, (LPBYTE *)&fi3);
                    503:     if(!nas && fi3)
                    504:     {
                    505:         props.rgIDSStart = IDS_FILEPROPS;
                    506: 
                    507:         if((fi3->fi3_permissions & PERM_FILE_WRITE) ||
                    508:             (fi3->fi3_permissions & PERM_FILE_CREATE))
                    509:                 nBitmap = 3;
                    510:         props.dwrgBmp = 0xfffff072 | (nBitmap << 8);
                    511: 
                    512:         props.rgsz[0] = fi3->fi3_pathname;
                    513:         props.rgsz[1] = fi3->fi3_username;
                    514:         props.rgsz[2] = szFromIDS1(IDS_FILEPROPS + 10 + nBitmap);
                    515:         wsprintf(szNumLocks, szFmtNum, fi3->fi3_num_locks);
                    516:         props.rgsz[3] = szNumLocks;
                    517:         props.rgsz[4] = NULL;
                    518:         props.rgsz[5] = NULL;
                    519: 
                    520:         if(wAction == VK_DELETE)
                    521:         {
                    522:             wsprintf(szBuffer, szFromIDS1(IDS_AREYOUSURE + LBITEM_FILE),
                    523:                 plbdata->rgsz, fi3->fi3_pathname);
                    524:             if(MessageBox(hwnd, szBuffer, szAppName,
                    525:                 MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2) == IDYES)
                    526:                     nas = NetFileClose(szServerName, plbdata->dwData);
                    527:         }
                    528:         else
                    529:         {
                    530:             DialogBoxParam(ghInst, MAKEINTRESOURCE(DLG_PROPERTIES), 
                    531:                 hwnd, PropDlgProc, (LPARAM)&props);
                    532:         }
                    533:     }
                    534:     NetApiBufferFree(fi3);
                    535:     return nas;
                    536: }
                    537: 
                    538: NET_API_STATUS
                    539: DisplayUserDetails(HWND hwnd, LBDATA *plbdata, WORD wAction)
                    540: {
                    541:     PROPERTIES      props;
                    542:     NET_API_STATUS  nas;
                    543:     time_t          tm_t;
                    544:     SESSION_INFO_2  *sesi2 = NULL;
                    545:     TCHAR           szNumOpens[11];
                    546:     TCHAR           szConnectTime[50];
                    547:     TCHAR           szIdleTime[50];
                    548:     TCHAR           *szNetName = plbdata->rgsz;
                    549:     TCHAR           *szUserName = szNetName + lstrlen(szNetName) + 1;
                    550:     TCHAR           *szShareName = szUserName + lstrlen(szUserName) + 1;
                    551: 
                    552:     nas = NetSessionGetInfo(szServerName, szNetName, szUserName,
                    553:         2, (LPBYTE *)&sesi2);
                    554: 
                    555:     if(!nas && sesi2)
                    556:     {
                    557:         props.rgIDSStart = IDS_USERPROPS;
                    558:         if(plbdata->dwData == STYPE_IPC)
                    559:             props.dwrgBmp = 0xfffff817; // IPC$ share
                    560:         else
                    561:             props.dwrgBmp = 0xfffff017; // Drive share
                    562: 
                    563:         if(sesi2->sesi2_user_flags & SESS_GUEST)
                    564:         {
                    565:             lstrcpy(szBuffer, szUserName);
                    566:             lstrcat(szBuffer, szFromIDS1(IDS_GUEST));
                    567:             props.rgsz[0] = szBuffer;
                    568:         }
                    569:         else
                    570:             props.rgsz[0] = szUserName;
                    571: 
                    572:         props.rgsz[1] = szNetName;
                    573:         props.rgsz[2] = szShareName;
                    574: 
                    575:         time(&tm_t);
                    576:         PutTime(tm_t - sesi2->sesi2_time, szIdleTime);
                    577:         PutDate(tm_t - sesi2->sesi2_time, szConnectTime);
                    578:         lstrcat(szConnectTime, TEXT(" "));
                    579:         lstrcat(szConnectTime, szIdleTime);
                    580:         props.rgsz[3] = szConnectTime;
                    581:         props.rgsz[4] = PutCounterTime(sesi2->sesi2_idle_time, szIdleTime);
                    582: 
                    583:         wsprintf(szNumOpens, szFmtNum, sesi2->sesi2_num_opens);
                    584:         props.rgsz[5] = szNumOpens;
                    585: 
                    586:         if(wAction == VK_DELETE)
                    587:         {
1.1.1.2 ! root      588:             // if user has open files, tell the del happy person this
        !           589:             // otherwise just reaffirm that they wanna hack em.
        !           590:             if(sesi2->sesi2_num_opens)
        !           591:             {
        !           592:                 wsprintf(szBuffer, szFromIDS1(IDS_AREYOUSURE + LBITEM_USER),
        !           593:                     szUserName);
        !           594:             }
        !           595:             else
        !           596:             {
        !           597:                 wsprintf(szBuffer, szFromIDS1(IDS_DISUSER), szUserName);
        !           598:             }
        !           599: 
1.1       root      600:             if(MessageBox(hwnd, szBuffer, szAppName,
                    601:                 MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2) == IDYES)
                    602:             {
1.1.1.2 ! root      603:                 nas = NetSessionDel(szServerName, szNetName, szUserName);
1.1       root      604:             }
                    605:         }
                    606:         else
                    607:         {
                    608:             DialogBoxParam(ghInst, MAKEINTRESOURCE(DLG_PROPERTIES), 
                    609:                 hwnd, PropDlgProc, (LPARAM)&props);
                    610:         }
                    611:     }
                    612: 
                    613:     if(!nas && !sesi2)
                    614:         nas = ERROR_NOT_CONNECTED;
                    615:     NetApiBufferFree(sesi2);
                    616:     return nas;
                    617: }
                    618: 
                    619: void
                    620: HandleMenu(HWND hwnd)
                    621: {
                    622:     HWND            hwndLB = GetWindow(hwnd, GW_CHILD);
                    623:     INT             nIndex;
                    624:     DWORD           dwData;
                    625: 
                    626:     nIndex = ListBox_GetCurSel(hwndLB);
                    627:     dwData = ListBox_GetItemData(hwndLB, nIndex);
                    628:     if((nIndex == LB_ERR) || (dwData == LB_ERR) || !dwData)
                    629:         goto err;
                    630: 
                    631:     switch(((LBDATA *)dwData)->dwType)
                    632:     {
                    633:         case LBITEM_FILE:
                    634:         case LBITEM_SHARE:
                    635:         case LBITEM_USER:
                    636:             ModifyMenu(ghMenu, IDM_DELETERESOURCE, MF_BYCOMMAND | MF_STRING,
                    637:                 IDM_DELETERESOURCE, 
                    638:                 szFromIDS1(IDM_DELETERESOURCE + ((LBDATA *)dwData)->dwType));
                    639:             break;
                    640: 
                    641:         default:
                    642:             goto err;
                    643:     }
                    644: 
                    645:     return;
                    646: 
                    647: err:
                    648:     EnableMenuItem(ghMenu, IDM_DELETERESOURCE, MF_BYCOMMAND | MF_GRAYED);
                    649: }
                    650: 
                    651: void
                    652: HandleWM_VKEY(HWND hwnd, WORD wAction)
                    653: {
                    654:     HWND            hwndLB = GetWindow(hwnd, GW_CHILD);
                    655:     INT             nIndex;
                    656:     DWORD           dwData;
                    657:     NET_API_STATUS  nas = 0;
                    658: 
                    659:     PunchTimer(FALSE);
                    660:     nIndex = ListBox_GetCurSel(hwndLB);
                    661:     dwData = ListBox_GetItemData(hwndLB, nIndex);
                    662:     if((nIndex == LB_ERR) || (dwData == LB_ERR) || !dwData)
                    663:         goto err;
                    664: 
                    665:     if((wAction == VK_RETURN) || (wAction == VK_DELETE))
                    666:     {
                    667:         switch(((LBDATA *)dwData)->dwType)
                    668:         {
                    669:             case LBITEM_FILE:
                    670:                 nas = DisplayFileDetails(hwnd, (LBDATA *)dwData, wAction);
                    671:                 break;
                    672: 
                    673:             case LBITEM_SHARE:
                    674:                 nas = DisplayShareDetails(hwnd, (LBDATA *)dwData, wAction);
                    675:                 break;
                    676: 
                    677:             case LBITEM_USER:
                    678:                 nas = DisplayUserDetails(hwnd, (LBDATA *)dwData, wAction);
                    679:                 break;
                    680:         }
                    681:     }
                    682: 
                    683: err:
                    684:     if(nas)
                    685:     {
                    686:         TCHAR   *szErrMessage;
                    687: 
                    688:         if(szErrMessage = GetSystemErrMessage(nas))
                    689:         {
                    690:             MessageBox(hwnd, szErrMessage, szAppName, MB_ICONEXCLAMATION);
                    691:             LocalFree((HLOCAL)szErrMessage);
                    692:         }
                    693:     }
                    694: 
                    695:     PunchTimer(TRUE);
                    696:     if(nas || (wAction == VK_DELETE))
                    697:         PostMessage(hwnd, WM_TIMER, 0, 0L);
                    698: }
                    699: 
                    700: void
                    701: AddErrorStringToLB(NET_API_STATUS nas)
                    702: {
                    703:     TCHAR *szErrMessage;
                    704: 
                    705:     if(nas & FILE_ENUM_ERROR)
                    706:         wsprintf(szBuffer, szFmtLB[LBITEM_DENIED], szFromIDS1(IDS_ERRENUMFILES));
                    707:     else
                    708:         wsprintf(szBuffer, szFmtLB[LBITEM_DENIED], szFromIDS1(IDS_ERRENUMUSERS));
                    709: 
                    710:     if(szErrMessage = GetSystemErrMessage(nas))
                    711:     {
                    712:         lstrcat(szBuffer, TEXT(": "));
                    713:         lstrcat(szBuffer, szErrMessage);
                    714:         LocalFree((HLOCAL)szErrMessage);
                    715:     }
                    716: 
                    717:     ListBox_InsertString(GetWindow(hwndMain, GW_CHILD), 0, szBuffer);
                    718:     ListBox_SetItemData(GetWindow(hwndMain, GW_CHILD), 0, 0);
                    719: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.