Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Создать юзверей


Автор: nerezus 10.7.2009, 00:48
Как создать пользователей? И как их потом убить после того, как программа завершится.

Автор: xvr 10.7.2009, 12:26
Цитата(nerezus @ 10.7.2009,  00:48)
Как создать пользователей? 

http://msdn.microsoft.com/en-us/library/aa370649(VS.85).aspx
Цитата

И как их потом убить после того, как программа завершится.
http://msdn.microsoft.com/en-us/library/aa370651(VS.85).aspx

Автор: nerezus 18.7.2009, 18:13
Можно пример с ним?
У меня на XP ругается, что "Неверный дескриптор", а на 2008 просто падает.

Код прилагаю(на C#):

Код

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using ComTypes = System.Runtime.InteropServices.ComTypes;
using Microsoft.Win32;
namespace WindowsFormsApplication1
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct USER_INFO_1
    {
        [MarshalAs(UnmanagedType.LPWStr)]
        public string sUsername;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string sPassword;
        public uint uiPasswordAge;
        public uint uiPriv;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string sHome_Dir;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string sComment;
        public uint uiFlags;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string sScript_Path;
    }
    public class UACreator
    {
        [DllImport("netapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        private static extern int NetUserAdd(
             [MarshalAs(UnmanagedType.LPWStr)] string servername,
             UInt32 level,
             IntPtr userInfo,
             out UInt32 parm_err);
        public static string UserAdd(string name, string password)
        {
            USER_INFO_1 user = new USER_INFO_1();
            user.sUsername = name.Trim();
            user.sPassword = password;
            user.uiPriv = 1;
            user.sScript_Path = "";
            user.sHome_Dir = "";
            user.sComment = "Autogenerated user account";
            IntPtr userPtr = Marshal.AllocHGlobal(Marshal.SizeOf(user));
            Marshal.StructureToPtr(user, userPtr, true); 
            uint outVal = 0;
            int result = NetUserAdd("", 1, userPtr, out outVal);
            if (result != 0)
            {
                return new System.ComponentModel.Win32Exception(result).Message;
            }
            else
            {
                return "Success";
            }
        }
    }
}

//MessageBox.Show(UserAdd("bebe", "bebe"));


Автор: xvr 20.7.2009, 09:44
Увы, в C# не силен, а пример с ними есть по ссылкам на MSDN из моего поста (но в plain С)
Еще не уверен, что в качестве имени сервера можно подать "" - подай хотябы "\\.\"

Автор: nerezus 20.7.2009, 11:34
Код

---------------------------

---------------------------
Синтаксическая ошибка в имени файла, имени папки или метке тома
---------------------------
ОК   
---------------------------


Это в примере для"\\\\.\\"  домена
Сишный код тоже другую ошибку дает(на мсдн странице в примерах)

Автор: xvr 20.7.2009, 12:27
Увы, я лично этими функциями не пользовался  smile Попробуй дать имя компьютера первым параметром.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)