Annotation of mstools/samples/sdktools/netwatch/net.c, revision 1.1.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.