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

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

unix.superglobalmegacorp.com

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