Я разработал приложение для Windows на C#. ОС — Windows 7.
Требование: — доступ к общей сетевой папке "Тест" с использованием кода с учетными данными с использованием класса WNetAddConnection2.
Ограничение: некоторые пользователи имеют доступ к этой общей папке "Тест", но для других пользователей установлено разрешение общего доступа "запретить".
в коде WNetAddConnection2 проверяет неправильное имя пользователя/пароль, это выдает ошибку.
Например
«Пользователь A» из локальной сети пытается получить доступ к общей папке «Test» с помощью команды запуска. Он не может получить доступ к «Доступ запрещен», поскольку у него нет разрешения.
но проблема в том, что класс WNetAddConnection2 позволяет «Пользователь А» успешно установил сетевое соединение.
Заразите «WNetAddConnection2 разрешает всем пользователям из домена». Класс проверяет права доступа.
Код
private void btnValidate_Click(object sender, EventArgs e)
{
bool valid = false;
try
{
NetworkCredential NC = new NetworkCredential(txtUserName.Text.Trim(), txtPassword.Text.Trim());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
public class NetworkConnection : IDisposable
{
string _networkName;
uint dwFlags;
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,"","",0x00000008 | 0x00000010);
if (result != 0)
{
string strErrMsg = "";
if (result == 67)
{
strErrMsg = "The network name cannot be found.";
}
if (result == 86)
{
strErrMsg = "Invalid UserName or Password for ProBiz server";
}
else if (result == 1219)
{
strErrMsg = "Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed.Close application to Disconnect all previous connections to the server or shared resource and try again.";
}
throw new Win32Exception(result, "Error connecting to "+networkName+" remote share.Error Code:"+result.ToString()+"."+strErrMsg);
}
else
{
MessageBox.Show("Test connection is successful for "+ networkName);
}
}
~NetworkConnection()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
WNetCancelConnection2(_networkName, 1, true );
var command = "NET USE /delete *";
ExecuteCommand(command, 5000);
}
public static int ExecuteCommand(string command, int timeout)
{
var processInfo = new ProcessStartInfo("cmd.exe", "/C " + command)
{
CreateNoWindow = true,
UseShellExecute = false,
WorkingDirectory = "C:\\",
};
var process = Process.Start(processInfo);
process.WaitForExit(timeout);
var exitCode = process.ExitCode;
process.Close();
return exitCode;
}
[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
}
Подробнее здесь: https://stackoverflow.com/questions/151 ... s-shared-f
Запретить класс WNetAddConnection2, который позволяет запрещенному пользователю получать доступ к общей папке. ⇐ C#
Место общения программистов C#
1769234970
Anonymous
Я разработал приложение для Windows на C#. ОС — Windows 7.
[b]Требование:[/b] — доступ к общей сетевой папке "Тест" с использованием кода с учетными данными с использованием класса WNetAddConnection2.
[b]Ограничение:[/b] некоторые пользователи имеют доступ к этой общей папке "Тест", но для других пользователей установлено разрешение общего доступа "запретить".
в коде WNetAddConnection2 проверяет неправильное имя пользователя/пароль, это выдает ошибку.
Например
«Пользователь A» из локальной сети пытается получить доступ к общей папке «Test» с помощью команды запуска. Он не может получить доступ к «Доступ запрещен», поскольку у него нет разрешения.
[b]но проблема в том, что класс WNetAddConnection2 позволяет «Пользователь А» успешно установил сетевое соединение.
Заразите «WNetAddConnection2 разрешает всем пользователям из домена». Класс проверяет права доступа.[/b]
Код
private void btnValidate_Click(object sender, EventArgs e)
{
bool valid = false;
try
{
NetworkCredential NC = new NetworkCredential(txtUserName.Text.Trim(), txtPassword.Text.Trim());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
public class NetworkConnection : IDisposable
{
string _networkName;
uint dwFlags;
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,"","",0x00000008 | 0x00000010);
if (result != 0)
{
string strErrMsg = "";
if (result == 67)
{
strErrMsg = "The network name cannot be found.";
}
if (result == 86)
{
strErrMsg = "Invalid UserName or Password for ProBiz server";
}
else if (result == 1219)
{
strErrMsg = "Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed.Close application to Disconnect all previous connections to the server or shared resource and try again.";
}
throw new Win32Exception(result, "Error connecting to "+networkName+" remote share.Error Code:"+result.ToString()+"."+strErrMsg);
}
else
{
MessageBox.Show("Test connection is successful for "+ networkName);
}
}
~NetworkConnection()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
WNetCancelConnection2(_networkName, 1, true );
var command = "NET USE /delete *";
ExecuteCommand(command, 5000);
}
public static int ExecuteCommand(string command, int timeout)
{
var processInfo = new ProcessStartInfo("cmd.exe", "/C " + command)
{
CreateNoWindow = true,
UseShellExecute = false,
WorkingDirectory = "C:\\",
};
var process = Process.Start(processInfo);
process.WaitForExit(timeout);
var exitCode = process.ExitCode;
process.Close();
return exitCode;
}
[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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/15159564/prevent-wnetaddconnection2-class-which-allows-prohibited-user-to-access-shared-f[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия