Как обеспечить имя пользователя и пароль при соединении с сетевым ресурсом

Поскольку кто-то сказал выше: Отладчик! = IDE.

gdb и (назад в день) (автономные) TurboDebugger работают просто великолепно для языков, которые они поддерживают [редактор], спасибо. (или еще более старая технология: отладчик Clipper связался в сам xBase исполняемый файл) - ни один из них не потребовал IDE

кроме того, хотя C / ++ кодирование более редко, printf операторы иногда маска от самой ошибки, Вы пытаетесь найти! (проблемы инициализации в автоматическом Варе на стеке, например, или выделение памяти / выравнивание)

Наконец, как другие заявили, можно использовать обоих. Некоторые проблемы оперативного выхода почти требуют печати, или по крайней мере разумного "*video_dbg = (is_good? '+': '-')"; где-нибудь в видеопамять. Мой возраст показывает, это находилось под DOS:-)

TMTOWTDI

177
задан gyrolf 17 November 2008 в 13:21
поделиться

2 ответа

Мне настолько понравился ответ Марка Брэкетта , что я сделал свою быструю реализацию. Вот оно, если кому-то это срочно понадобится:

public class NetworkConnection : IDisposable
{
    string _networkName;

    public NetworkConnection(string networkName, 
        NetworkCredential credentials)
    {
        _networkName = networkName;

        var netResource = new NetResource()
        {
            Scope = ResourceScope.GlobalNetwork,
            ResourceType = ResourceType.Disk,
            DisplayType = ResourceDisplaytype.Share,
            RemoteName = networkName
        };

        var userName = string.IsNullOrEmpty(credentials.Domain)
            ? credentials.UserName
            : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);

        var result = WNetAddConnection2(
            netResource, 
            credentials.Password,
            userName,
            0);

        if (result != 0)
        {
            throw new Win32Exception(result);
        }   
    }

    ~NetworkConnection()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        WNetCancelConnection2(_networkName, 0, true);
    }

    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NetResource netResource, 
        string password, string username, int flags);

    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string name, int flags,
        bool force);
}

[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
    public ResourceScope Scope;
    public ResourceType ResourceType;
    public ResourceDisplaytype DisplayType;
    public int Usage;
    public string LocalName;
    public string RemoteName;
    public string Comment;
    public string Provider;
}

public enum ResourceScope : int
{
    Connected = 1,
    GlobalNetwork,
    Remembered,
    Recent,
    Context
};

public enum ResourceType : int
{
    Any = 0,
    Disk = 1,
    Print = 2,
    Reserved = 8,
}

public enum ResourceDisplaytype : int
{
    Generic = 0x0,
    Domain = 0x01,
    Server = 0x02,
    Share = 0x03,
    File = 0x04,
    Group = 0x05,
    Network = 0x06,
    Root = 0x07,
    Shareadmin = 0x08,
    Directory = 0x09,
    Tree = 0x0a,
    Ndscontainer = 0x0b
}
306
ответ дан 23 November 2019 в 20:17
поделиться

Хорошо ... я могу пересмотреть ..

Отказ от ответственности: у меня только что был день 18 часов (опять же) .. Я старый и забыл .. Я не могу пишется .. У меня короткое внимание Продолжительность так мне лучше отвечать быстрее ..: -)

Вопрос:

Можно ли изменять принцип нити пользователю без учетной записи на локальной машине?

Ответ:

Да, вы можете изменить принцип нити, даже если учетные данные, которые вы используете, не определены локально или находятся за пределами «леса».

Я просто бежал в эту проблему при попытке подключения к SQL Server с аутентификацией NTLM из службы. Этот вызов использует учетные данные, связанные с процессом, означающим, что вам нужна локальная учетная запись, либо учетная запись домена для аутентификации, прежде чем вы сможете сдать. BLAH, BLAH ...

Но ...

Звонок в логотнике (..) С атрибутом ???? _ New_credentials вернет токен безопасности, не пытаясь аутентифицировать учетные данные. Kewl .. не нужно определять учетную запись в «лесу». После того, как у вас есть токен, вам может придеться позвонить в дубликатена () с возможностью разрешения подражания, что приведет к новому жетону. Теперь вызовите SetThreadtoken (NULL, токен); (Это может быть и токен?) .. Вызов беспечно-аспинателоггенератор (токен); может потребоваться, но я так не думаю. Посмотрите ..

Делайте то, что вам нужно сделать ..

Вызов RevertToself (), если вы назвали невероятным (), затем Setthreadtoken (NULL, NULL); (Думаю ... посмотрите на это), а потом закрывать () на созданных ручках ..

Нет обещаний, но это сработало для меня ... Это от верхней части моей головы (как мои волосы) и я не могу записать !!!

3
ответ дан 23 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: