- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
public static string[] GetLogicalDrives()
{
// System.Environment.GetLogicalDrives()
new EnvironmentPermission(PermissionState.Unrestricted).Demand();
// System.IO.Directory.GetLogicalDrives()
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
int logicalDrives = Win32Native.GetLogicalDrives();
if (logicalDrives == 0)
{
__Error.WinIOError();
}
uint num = (uint)logicalDrives;
int num2 = 0;
while (num != 0u)
{
if ((num & 1u) != 0u)
{
num2++;
}
num >>= 1;
}
string[] array = new string[num2];
char[] array2 = new char[]
{
'A',
':',
'\\'
};
num = (uint)logicalDrives;
num2 = 0;
while (num != 0u)
{
if ((num & 1u) != 0u)
{
array[num2++] = new string(array2);
}
num >>= 1;
char[] expr_6E_cp_0 = array2;
int expr_6E_cp_1 = 0;
expr_6E_cp_0[expr_6E_cp_1] += '\u0001';
}
return array;
}
Копался сегодня в дебрях .NET'а и нашёл 2 метода получения списка дисков:
System.Environment.GetLogicalDrives() и System.IO.Directory.GetLogicalDrives()
Различается код только первой срокой запроса разрешений.
Если один метод устарел-бы, то можно было его форварднуть через атрибут TypeForwardedTo.
Или хотя-бы объединить код вынеся запрос разрешений.
Оба метода доступны ещё с .NET 1.1. Но вот класс DriveInfo, который появился только в .NET 2.0 использует метод Directory.GetLogicalDrives()
Это такая "фича" с копипастом кода или тут есть какой-то сакральный смысл?
1024-- 26.06.2013 03:14 # 0
Не просто метод, но и проверка компилятора.
1024-- 26.06.2013 12:18 # 0
neeedle 26.06.2013 09:55 # −1
TauSigma 26.06.2013 11:46 # 0
neeedle 26.06.2013 12:05 # 0
roman-kashitsyn 26.06.2013 12:24 # 0
neeedle 26.06.2013 12:57 # 0
TauSigma 26.06.2013 12:27 # 0
Но мультикаст наследуется от делегата. Там такого явного копипаста не прослеживается.
Как-то так:
Ну и заодно туда пихнуть код типа Directory.InternalExists, некоторых методов DriveInfo и т.п...
А то класс Win32Native уж очень жирно размазан по всему mscorlib'у...
krypt 26.06.2013 12:57 # 0
neeedle 26.06.2013 12:58 # 0
Так что не стоит зря гадать, я думаю.
К тому же методы возвращают строку в одинаковом формате.
TauSigma 26.06.2013 13:30 # 0
Тут ещё фигня в том, что permission'ы для обоих методов различаются.
Получается, чтобы полностью перекрыть вызов метода GetLogicalDrives() администраторам придётся перекрывать оба метода.
Или эти пермишены наследуются? В таком случае, придётся перекрывать пермишеном выше.
guest 01.04.2017 08:08 # −16
guest 14.04.2017 07:52 # −12