C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как програмно расшарить(дать полный доступ) папку?, Как програмно расшарить папку?
** serg128
Отправлено: 17.09.2004, 16:55


Не зарегистрирован







Как програмно расшарить(дать полный доступ) папку на компе? Если можно, кусок кода.
xim
Отправлено: 17.09.2004, 22:47


Станционный диспетчер

Группа: Участник
Сообщений: 143



Этот кусок добавить простейшую шару (для всех)
<подробнее см.MSDN (NetShareAdd/NetShareSetInfo)>
CODE

#include <lmuse.h>
#include <lmshare.h>
int  share_folder(char *share_name,
                 char *share_comm,
                 char *share_path)
{
  NET_API_STATUS res;
  SHARE_INFO_2 p;
  DWORD pe = 0;

  p.shi2_netname        = WideString(share_name).c_bstr();
  p.shi2_type               = STYPE_DISKTREE;
  p.shi2_remark           = WideString(share_comm).c_bstr();
  p.shi2_permissions   = 0;
  p.shi2_max_uses      = -1;
  p.shi2_current_uses = 0;    
  p.shi2_path               = WideString(share_path).c_bstr();
  p.shi2_passwd          = NULL;
  res=NetShareAdd(NULL,2,(LPBYTE)&p,&pe);
  return res; // ==0 — success

}


Отредактировано Георгий — 24/11/2005, 23:51
serg128
Отправлено: 21.09.2004, 12:11


Дежурный стрелочник

Группа: Участник
Сообщений: 46



На локальной машине расшаривает нормально, а вот попробовал на удаленной — написал ACCESS_DENIED. ЧТО Я НЕ ТАК СДЕЛАЛ?
Shura
Отправлено: 21.09.2004, 15:28


Дежурный стрелочник

Группа: Участник
Сообщений: 45



Хм, так кто ж тебе даст орудовать на удаленной машине?


Хотя, в случае с NT-based могу ошибаться, возможно надо смотреть в локальной политике безопасности.
Konstantine
Отправлено: 21.09.2004, 15:35


Мастер участка

Группа: Модератор
Сообщений: 545



нада админские права иметь на той машине.... т.е. или пользователя нада ввести, или иметь права админа в домене (и та машина тоже в этом же домене). Сам подумай — будет ли система каких-то удалённых леваков слушать?
xim
Отправлено: 22.09.2004, 09:01


Станционный диспетчер

Группа: Участник
Сообщений: 143



Для расшаривания удаленного ресурса в функции NetShareAdd:
<для win95/98/ME>
CODE
...
  char FAR * pszServerName = "\\\\Server";
  short nLevel = 50;
  struct share_info_50* pBuf = NULL;
  unsigned short cbBuffer;
  NET_API_STATUS nStatus;
  cbBuffer = sizeof(struct share_info_50);
  pBuf = malloc(cbBuffer);
  if (!pBuf)<нафиг из этого куска с еррором>
  strcpy(pBuf->shi50_netname, "ShareName"); // имя ресурса на сервере
  pBuf->shi50_type = STYPE_DISKTREE;
  pBuf->shi50_flags = SHI50F_FULL;
  pBuf->shi50_remark = NULL;
  pBuf->shi50_path = <путь к ресурсу>;
  pBuf->shi50_rw_password[0] = '\0'; // без пароля
  pBuf->shi50_ro_password[0] = '\0'; // без пароля
  nStatus = NetShareAdd(pszServerName,nLevel,
                        (char FAR *)pBuf, cbBuffer);
  if (nStatus == NERR_Success)
  <ОК message>  
  else
  <error с номером nStatus>
  if (pBuf)free(pBuf);
...


Отредактировано Георгий — 24/11/2005, 23:52
xim
Отправлено: 22.09.2004, 09:06


Станционный диспетчер

Группа: Участник
Сообщений: 143



в предпоследней строке после else естественно не if..., а ошибка с кодом nStatus
xim
Отправлено: 22.09.2004, 09:31


Станционный диспетчер

Группа: Участник
Сообщений: 143



Попробуй еще
CODE

#include
#include
int share_res(
char *server_name,
char *share_name,
char *share_path)
{
NET_API_STATUS res;
SHARE_INFO_2 p;
DWORD pe = 0;

p.shi2_netname = WideString(share_name).c_bstr();
p.shi2_type = STYPE_DISKTREE;
p.shi2_remark = L"";
p.shi2_permissions = 0;
p.shi2_max_uses = -1;
p.shi2_current_uses = 0;
p.shi2_path = WideString(share_path).c_bstr();
p.shi2_passwd = NULL;
res=NetShareAdd(WideString(server_name).b_str(),2,(LPBYTE)&p,&pe);
return res; // ==0 — success

}


Отредактировано Георгий — 24/11/2005, 23:52

Вернуться в Вопросы программирования в C++Builder