程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 如何在Win9x/2k下建立共享目錄

如何在Win9x/2k下建立共享目錄

編輯:C語言基礎知識

  在Windows中建立一個共享目錄,通常是使用NetShareAdd函數.但是在Win2k和Win9x下,這個函數分別是包含在Netapi32.dll和Svrapi.dll中.
   那麼假如直接在程序中使用Netapi32.lib或Svrapi.lib,在不同的操作系統下運行時會發生找不到xxx函數的輸出錯誤. 解決的辦法就是通過GetProcAddress動態獲取NetShareAdd.正好ccrun在csdn回答一位網友的問題,順便寫了些代碼,在這裡貼出來.
  
   注:
   1. 以下代碼已在Win2k ADV Server和Win9x SE中通過測試.編譯時不需要包含lm.h或Svrapi.h,假如包含的話,會引起數據類型重名的錯誤.
   2. 請使用Borland C++ Builder編譯器.假如您用VC,個別參數需要改動
  
   代碼如下:
  
   typedef DWord (WINAPI *NETSHAREADD2K)(LPWSTR, DWORD, LPBYTE, LPDWORD);
   typedef DWORD (WINAPI *NETSHAREADD9X)(const char FAR*, short, const char FAR*, unsigned short);
   NETSHAREADD2K NetShareAdd2k;
   NETSHAREADD9X NetShareAdd9x;
  
   bool bWinNT; // 操作系統標志
   HINSTANCE hDll; // DLL文件句柄
  
   #define NNLEN           80      // 共享名的長度
   #define LM20_NNLEN      12      // LM 2.0 共享名的長度
   #define SHPWLEN         8       // 共享密碼的長度
   #define STYPE_DISKTREE  0       // 磁盤共享
   #define SHI50F_FULL     0x0002
   #define NERR_SUCcess    0       // 操作成功
  
   #define NERR_BASE                2100
   #define NERR_DuplicateShare     (NERR_BASE+18)  // 共享名稱已經存在
   #define NERR_RedirectedPath     (NERR_BASE+17)  // 重定向資源的操作非法
   #define NERR_UnknownDevDir      (NERR_BASE+16)  // 設備或目錄不存在
  
   typedef struct _share_info_50 // 用於Win9x
   {
       char            shi50_netname[LM20_NNLEN+1];  // 共享名
       unsigned char   shi50_type;                   // 
  
       unsigned short  shi50_flags;                  // 
       char FAR *      shi50_remark;                 // ANSI 備注
       char FAR *      shi50_path;                   // 共享的資源,也就是共享的目錄
       char            shi50_rw_password[SHPWLEN+1]; // 可讀寫的密碼
       char            shi50_ro_password[SHPWLEN+1]; // 只讀密碼
   }share_info_50;
  
   typedef struct _SHARE_INFO_2 // 用於Win2k
   {
       LPWSTR  shi2_netname;
       DWORD   shi2_type;
       LPWSTR  shi2_remark;
       DWORD   shi2_permissions;
       DWORD   shi2_max_uses;
       DWORD   shi2_current_uses;
       LPWSTR  shi2_path;
       LPWSTR  shi2_passwd;
   }SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;
  
   //---------------------------------------------------------------------------
   bool __fastcall InitApi() // 根據操作系統的不同,從Dll中獲取API
   {
       // 判定系統平台
       OSVERSIONINFO info;
       info.dwOSVersionInfoSize = sizeof(info);
       GetVersionEx(&info);
       bWinNT = (info.dwPlatformId == VER_PLATFORM_WIN32_NT)? true: false;
  
       if(bWinNT)
       {
           hDll = LoadLibrary("Netapi32.dll"); // win2k
           if(hDll)
           {
               NetShareAdd2k = (NETSHAREADD2K)GetProcAddress(hDll, "NetShareAdd");
               return (NetShareAdd2k != NULL);
           }
           else
  
               return false;
      &n
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved