Win32 API FAQ
Страница 10.


 

16)--------------------------------------------------------------------------

 

    Q> Как подключить сетевой диск?

    A>

DWORD ConnectRemoteDrive(LPSTR ShareName,LPSTR LocalDrive)
{
NETRESOURCE nr;
ZeroMemory(&nr,sizeof(nr));

       nr.dwScope=RESOURCE_GLOBALNET;
       nr.dwType=RESOURCETYPE_DISK;//RESOURCETYPE_ANY;
       nr.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;
       nr.dwUsage=RESOURCEUSAGE_CONNECTABLE;
       nr.lpLocalName=LocalDrive;
       nr.lpRemoteName=ShareName;
       nr.lpComment="";
       nr.lpProvider=NULL;

       return WNetAddConnection2(&nr, // NETRESOURCE from enumeration
       (LPSTR) NULL, // no password
       (LPSTR) NULL, // logged-in user
       CONNECT_UPDATE_PROFILE); // update profile with connect info

}

17)-------------------------------------------------------------------------

 

    Q> А как его отключить?

    A> WNetCancelConnection2(LPSTR LocalDrive,CONNECT_UPDATE_PROFILE,TRUE);

 

18)-------------------------------------------------------------------------

 

    Q> Как послать сообщение юзеру(а-ля net send)

    A>
   
    Вариант 1:
          
    NET_API_STATUS x=NetMessageBufferSend(
                    LPTSTR servername,
            LPTSTR msgname,
            LPTSTR fromname,
            LPBYTE buf,
            DWORD buflen
              );

    Вариант 2:


Можно через CreateFile/WriteFile, но в этом случае можно послать сообщение
только компьютеру либо на локальную рабочую группу.

Вот пример:(работает как под NT так и под 9x);

HANDLE hSlot = CreateFile("\\\\computername\\mailslot\\messngr",
       GENERIC_WRITE, FILE_SHARE_READ, NULL,
       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hSlot != INVALID_HANDLE_VALUE)
{
      char buf = "From\0\To\0Message\0";
      uint cb = sizeof(buf);
      WriteFile(hSlot, buf, cb, &cb, NULL);
      CloseHandle(hSlot);
}

 

19)--------------------------------------------------------------------------

 

    Q> Как создать юзера и дать ему права?

    A>

NET_API_STATUS UserAdd(LPSTR username) //(c) Serge Andyk
{
// некоторые используемые функции описаны выше

USER_INFO_2 user_info;

char compname[256];
wchar_t wcompname[256];
DWORD parm_err=0;
LSA_HANDLE PolicyHandle;

LPTSTR lpszSystemInfo; // ptr. to system info. string
DWORD cchBuff = 256; // size of comp. or user name
TCHAR tchBuffer2[256]; // buffer for concat'd. str.
WCHAR wGroupNameAdd[20]=L"Administrators";
lpszSystemInfo = tchBuffer2;
ZeroMemory(&user_info,sizeof(user_info));

       GetComputerName(lpszSystemInfo, &cchBuff);
       strcpy(compname,"\\\\");
       strcat(compname,lpszSystemInfo);

       mbstowcs( wcompname, compname, strlen(compname)+1 );
       mbstowcs(user_info.usri2_name,username, strlen(username)+1 );

    //-------создаем юзера------------//

           user_info.usri2_password = L"";
           user_info.usri2_priv = USER_PRIV_USER;
           user_info.usri2_flags =

UF_SCRIPT|UF_PASSWD_CANT_CHANGE|UF_DONT_EXPIRE
_PASSWD|UF_NORMAL_ACCOUNT;

user_info.usri2_acct_expires=TIMEQ_FOREVER;

    NetUserAdd(wcompname,// PDC name
          2L, // level
          (LPBYTE)&user_info, // input buffer
          &parm_err ); // parameter in error

    GetAccountSid(
               NULL, // default lookup logic
               username, // account to obtain SID
               &pSid // buffer to allocate to contain resultant SID
               );

    NetLocalGroupAddMember(0,wGroupNameAdd,pSid);

    //---------даем ему кое-какие права-----------//

OpenPolicy(
        wcompname, // target machine
        POLICY_ALL_ACCESS,
        &PolicyHandle // resultant policy handle
         );

 

 
« Предыдущая статья   Следующая статья »