elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7
11  Programación / .NET (C#, VB.NET, ASP) / Sencillo Algoritmo de Números Pseudoaleatorios [Aporte] en: 17 Septiembre 2011, 21:31 pm
Estuve prácticando hacer un algoritmo sencillo para generar números aletorios porque ya saben el de Visual Studio tiene muchos errores no me gusta :silbar:

El principal problema es la semilla que siempre usamos, datos que cambian constantemente como los Ticks del sistema o la hora, pero lamentablemente los procesadores de hoy en día trabajan tan rápido que en un milisegundo se producen miles de números "aletorios" con la misma semilla, y obtenemos horribles patrones o muchos números repetidos.

La función obtiene una cantidad Count de valores entre Min y Max de números pseudoaleatorios.

Código
  1.    Public Function RandomEx(ByVal Min As Long, ByVal Max As Long, Optional ByVal Count As ULong = 1) As Long()
  2.  
  3.        RandomEx = New Long() {}
  4.  
  5.        Dim Seed As Long = Date.Now.Ticks
  6.  
  7.        Do While RandomEx.Length <> Count
  8.            Array.Resize(RandomEx, RandomEx.Length + 1)
  9.            RandomEx.SetValue((Seed Mod (Max + 1)) + Min, RandomEx.Length - 1)
  10.            Seed -= Math.Floor(Seed / (Count + 1))
  11.        Loop
  12.  
  13.    End Function

Básicamente esto se encarga de colocar a Seed entre Min y Max
Código:
(Seed Mod (Max + 1)) + Min

Y esto de mantener a Seed diferente en cada vuelta del búcle, la fórmula asegura que Seed siempre será diferente sin causar Overflow.
Código:
Seed -= Math.Floor(Seed / (Count + 1))

12  Programación / .NET (C#, VB.NET, ASP) / AddHandler Con [Delegate].CreateDelegate [Solucionado] en: 4 Septiembre 2011, 20:23 pm
Quiero crear hacer un Handler con Delegate, me explico, normalmente uno hace un Handler así:

Código
  1.    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        MessageBox.Show("Hola")
  3.    End Sub

Usando la instrucción Handles

Yo quiero hacerlo así:

Código
  1.  
  2.  
  3.    Public Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  4.        MessageBox.Show("Hola")
  5.    End Sub
  6.  
  7.        Dim MethodName As String = "Button1_Click"
  8.        Dim HandlerType As Type = GetType(EventHandler)
  9.        Dim MethodI As MethodInfo = Me.GetType.GetMethod(MethodName)
  10.  
  11.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  12.        Dim MethodName As String = "Button1_Click"
  13.        Dim HandlerType As Type = GetType(EventHandler)
  14.        Dim MethodI As MethodInfo = Me.GetType.GetMethod(MethodName)
  15.        Dim DelegateEvent As [Delegate] = _
  16.        [Delegate].CreateDelegate( _
  17.        HandlerType, _
  18.        MethodI, _
  19.        True)
  20.  
  21.        AddHandler Button1.Click, DelegateEvent
  22.  
  23. End Sub

Cuando creo el DelegateEvent da el error Error al enlazar con el método de destino.

No sé si este bien, ¿Qué está mal hecho?

Lo he logrado con este código

Código
  1.    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.        Dim MethodName As String = "Button4_Click"
  3.        Dim HandlerType As Type = GetType(EventHandler)
  4.        Dim MethodI As MethodInfo = Me.GetType.GetMethod(MethodName)
  5.        Dim DelegateEvent As [Delegate] = _
  6.        [Delegate].CreateDelegate( _
  7.        HandlerType, _
  8.        Me, _
  9.        MethodName)
  10.  
  11.        AddHandler Button4.Click, DelegateEvent
  12.  
  13.    End Sub
13  Programación / .NET (C#, VB.NET, ASP) / Temperatura del CPU en: 2 Septiembre 2011, 19:58 pm
No he podido encontrar una forma de obtener la temperatura del CPU que funcione en las páginas de Google así como en Microsoft sale este código:

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.  
  5.        Try
  6.  
  7.            Dim searcher As New ManagementObjectSearcher( _
  8.                "root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")
  9.  
  10.            For Each queryObj As ManagementObject In searcher.Get()
  11.  
  12.                Dim temp As Double = CDbl(queryObj("CurrentTemperature"))
  13.  
  14.                temp = (temp - 2732) / 10.0
  15.  
  16.                MessageBox.Show(temp.ToString)
  17.  
  18.            Next
  19.  
  20.        Catch err As ManagementException
  21.  
  22.            MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
  23.  
  24.        End Try
  25.  
  26.    End Sub
  27.  
  28. End Class

Que obviamente  funciona pero parace ser incompatible con Windows Vista/7, incluso el mensaje de error dice explícitamente "Incompatible", alguna otra forma de obtener la temperatura del CPU? Gracias.
14  Programación / .NET (C#, VB.NET, ASP) / Problema con Notación Científica en: 21 Junio 2011, 05:05 am
Estoy haciendo acelerando un código que tengo para factorizar enteros muy grandes, me va muy bien, pero tengo un problema, no puedo trabajar con números grandes sin que .Net los exprese en Notación Científica :s

¿Como puedo hacer para que exprese los números de manera normal?, ya que al pasar un número a notación científica se ignoran muchos números que generan un grave desajuste al momento de hacer un cálculo.

Así podemos ver como se expresa el número:

Código
  1.  
  2.        Dim X As Double = Double.MaxValue
  3.  
  4.        Console.WriteLine(X)
  5.        Console.ReadKey()
  6.  
  7.  
15  Programación / Programación C/C++ / Inyección de Codigo para API Hook en: 16 Abril 2011, 05:42 am
LLevo no mucho tiempo programando en C++ estoy intentando hacer un hook por inyección de código, tengo el código que inyecta código directamente en un proceso y tengo la funciones que hacen un hook por tramplín a una función (API). Quisas este equivocado o suene ignorante XD soy nuevo con los hook y estas cosas quisiera que me corrigieran si estoy equivocado, mi pregunta es: ¿debo inyectar en el proceso externo las funciones que se encargan del hook?, quiero decir para que el proceso externo ejecute el mismo la función que hookea el API. Pero no entiendo como hacerlo llevo horas y me tiene confundido :-X si me pudiesen hechar una mano solo darme el camino para seguir estaria agredecido. Les dejo los sources:

Hook por Trampolín (Ejemplo en el mismo Proceso)
Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. DWORD HookFunction(LPCSTR lpModule, LPCSTR lpFuncName, LPVOID lpFunction, unsigned char *lpBackup);
  5. BOOL UnHookFunction(LPCSTR lpModule, LPCSTR lpFuncName, unsigned char *lpBackup);
  6. int Hooked_MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
  7.  
  8. BYTE BackUp[6];
  9.  
  10. LPCSTR Function = "MessageBoxExA";
  11.  
  12. void WinMainCRTStartup()
  13. {
  14.  
  15. MessageBoxA(0, "=( Sin Hook", "", MB_OK); // Mensaje
  16.  
  17. HookFunction("user32.dll", Function, Hooked_MessageBox, BackUp); // Hookear Función
  18.  
  19. MessageBoxA(0, "=( Sin Hook", "", MB_OK); // Mensaje
  20.  
  21. }
  22.  
  23. int Hooked_MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) // Función a la que se desvia la función original
  24. {
  25. UnHookFunction("user32.dll", Function, BackUp); // Se llama a la función UnHook para evitar la recursividad
  26.  
  27. int x = MessageBoxA(hWnd, "=) Hooked", lpCaption, uType); // Se llama la función original
  28.  
  29. HookFunction("user32.dll", Function, Hooked_MessageBox, BackUp); // Se aplica el Hook nuevamente
  30. return x; // Se retorna el resultado de la función original
  31. }
  32.  
  33. DWORD HookFunction(LPCSTR lpModule, LPCSTR lpFuncName, LPVOID lpFunction, unsigned char *lpBackup) // Función que realiza el Hook al API
  34. {
  35. DWORD dwAddr = (DWORD)GetProcAddress(GetModuleHandle(lpModule), lpFuncName); // Obtiene la dirección de la API
  36.       // Array de opcodes en lenguaje de maquina (ASM) para desviar la función
  37. BYTE jmp[6] = { 0xe9, //jmp
  38. 0x00, 0x00, 0x00, 0x00, //address
  39. 0xc3
  40. }; //retn
  41.  
  42. ReadProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0); // Se guardan los primeros 6 bytes de la función
  43.  
  44. DWORD dwCalc = ((DWORD)lpFunction - dwAddr - 5); // ( to - from) - 5 // Se calcula la posición donde se escribira el salto
  45.  
  46. memcpy(&jmp[1], &dwCalc, 4); // Se copia en memoria el salto
  47.  
  48. WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, jmp, 6, 0); // Se escribe en memoria los 6 bytes del salto
  49.  
  50. return dwAddr; // Se retorna la dirección del API
  51. }
  52.  
  53. BOOL UnHookFunction(LPCSTR lpModule, LPCSTR lpFuncName, unsigned char *lpBackup) // Función que retira el Hook de la API
  54. {
  55. DWORD dwAddr = (DWORD)GetProcAddress(GetModuleHandle(lpModule), lpFuncName); // Se obtiene la dirección de la API
  56.  
  57. if (WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0)) // Si se logra escribir los bytes guardados en la función HookFunction
  58. {
  59. return TRUE; // Se retorna TRUE
  60. }
  61. return FALSE; // Sino entonces se retorna FALSE
  62. }
  63.  

Inyecta código en un proceso externo (Ejemplo hacer que un proceso externo ejecute un MessageBox)
Código
  1. #include <windows.h>
  2. #include <tlhelp32.h>
  3. #include <stdio.h>
  4.  
  5. //Creamos un puntero a la api que queremos inyectar
  6. typedef int (WINAPI *datMessageBoxA) (HWND, LPCTSTR, LPCTSTR, UINT);
  7.  
  8. //La estructura que inyectaremos
  9. struct datos
  10. {
  11. datMessageBoxA apiMessageBoxA;
  12. char titulo  [20];
  13. char mensaje [20];
  14. };
  15.  
  16. //Declaración de funciones
  17. DWORD GetAdres(char *module, char *function);
  18.  
  19. //La función que inyectaremos
  20. DWORD inyectada (datos *data)
  21. {
  22. data -> apiMessageBoxA (0, data->mensaje, data->titulo, 0);
  23. return 0;
  24. }
  25.  
  26. //La función inyectora
  27. void inyectora()
  28. {
  29. int      pid;          // Este es el pid del proceso en el que nos queremos inyectar
  30. HANDLE  proc;        // El handle del proceso en el que inyectaremos
  31. datos    dat;          // El tipo de dato de la estructura
  32. DWORD    TamFun;      // El tamaño de la función a inyectar
  33. void*    esp;          // Lugar de memoria donde copiaremos nuestra función
  34.  
  35. HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //Obtenemos el pid
  36. PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
  37. while(Process32Next(handle, &procinfo))
  38. {
  39.  if(!strcmp(procinfo.szExeFile, "APIHOOK.exe"))
  40.  {
  41.      CloseHandle(handle);
  42.    pid = procinfo.th32ProcessID;
  43.  }
  44. }
  45. CloseHandle(handle);
  46.  
  47. //Abrimos el proceso en el que nos inyectaremos
  48. proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  49.  
  50. //Metemos la dirección de la api en la estructura llamando a la función GetAdres
  51. dat.apiMessageBoxA = (datMessageBoxA) GetAdres ("USER32.DLL", "MessageBoxA");
  52.  
  53. //Inicializamos las variables que contendrán el mensaje
  54. sprintf(dat.mensaje,"Mensaje");
  55. sprintf(dat.titulo,"Texto");
  56.  
  57. //Reservamos espacio para nuestra estructura en el proceso a inyectar y la escribimos
  58. datos *dat_ = (datos*) VirtualAllocEx(proc, 0, sizeof(datos), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
  59. WriteProcessMemory(proc, dat_, &dat, sizeof(datos), NULL);
  60.  
  61. //Calculamos el tamaño de la función a inyectar
  62. TamFun = (long unsigned int) inyectora - (long unsigned int)inyectada;
  63.  
  64. //Reservamos espacio para la función, escribimos en él y creamos un hilo
  65. esp = VirtualAllocEx(proc, 0, TamFun, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  66. WriteProcessMemory(proc, esp, (void*)inyectada, TamFun, NULL);
  67. CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE) esp, dat_, 0, NULL);
  68. }
  69.  
  70. //La función main
  71. int main()
  72. {
  73. inyectora();
  74. system("pause>nul");
  75. return EXIT_SUCCESS;
  76. }
  77.  
  78. //Función que nos devuelve un DWORD con la dirección de una api
  79. DWORD GetAdres(char *module, char *function)
  80. {
  81. HMODULE dh = LoadLibrary(module);
  82. DWORD pf = (DWORD)GetProcAddress(dh,function);
  83. FreeLibrary(dh);
  84. return pf;
  85. }
  86.  
16  Programación / .NET (C#, VB.NET, ASP) / [Aporte] Factorización Relativamente Rápida - Actualizado 18/08/2012 - en: 15 Marzo 2011, 04:38 am
Cada vez más rápido y con más soporte para números más grandes :laugh:

Quizás a alguien le sirva ;D factoriza números enteros incluso mayores que Decimal.MaxValue en menos de una décima de segundo para la mayoría hay números que se factorizan más lento que otros pero es un un porcentaje muy bajo. La solución es exponencial en tiempo polinomial, quiere decir que todo número N que sea Natural puede ser factorizado por este algoritmo en un tiempo relativamente corto y este se va exponiendo (Aumentando) con los dígitos que contenga N.

Código
  1.    Function PSqrt(ByVal N As Decimal) As Decimal
  2.  
  3.        PSqrt = 1D
  4.  
  5.        Try
  6.  
  7.            Dim L As Decimal = Math.Floor(Math.Log(N))
  8.            Dim b As Decimal, c As Decimal, d As Decimal
  9.  
  10.  
  11.            For a As Decimal = L To 2D Step -1D
  12.                b = 1D / a
  13.                c = Math.Floor(N ^ b)
  14.                d = (c ^ a)
  15.                If d = N Then
  16.                    Return a
  17.                End If
  18.            Next
  19.  
  20.        Catch ex As OverflowException
  21.            Return 1D
  22.        End Try
  23.  
  24.    End Function
  25.  
  26.    Public Primes As Decimal() = New Decimal() {2D, 3D, 5D, 7D}
  27.    Public Function IsPrime(ByVal N As Decimal) As Boolean
  28.  
  29.        If (N Mod 2D = 0D) Then
  30.            Return False
  31.        End If
  32.  
  33.        If PSqrt(N) > 1D Then
  34.            Return False
  35.        End If
  36.  
  37.        If Primes.Contains(N) Then
  38.            Return True
  39.        End If
  40.  
  41.        IsPrime = True
  42.  
  43.        Dim R As Decimal = Math.Floor(Math.Sqrt(N))
  44.  
  45.        For Y As Decimal = 3D To R Step 2D
  46.            If (N Mod Y = 0D) And (Not Y = N) Then
  47.                Return False
  48.            End If
  49.        Next
  50.  
  51.    End Function
  52.  
  53.    Public Function Factorize(ByVal N As Decimal) As Dictionary(Of Decimal, Decimal)
  54.  
  55.        Factorize = New Dictionary(Of Decimal, Decimal)
  56.  
  57.        Dim PSqrtD As Decimal = PSqrt(N)
  58.  
  59.        If PSqrtD > 1D Then
  60.  
  61.            Dim SSqrt As Decimal = N ^ (1D / PSqrtD)
  62.  
  63.            If IsPrime(SSqrt) Then
  64.                Factorize.Add(SSqrt, PSqrtD)
  65.            Else
  66.                For Each x As KeyValuePair(Of Decimal, Decimal) In Factorize(SSqrt)
  67.                    Factorize.Add(x.Key, x.Value * PSqrtD)
  68.                Next
  69.            End If
  70.  
  71.        Else
  72.            If IsPrime(N) Then
  73.                Factorize.Add(N, 1D)
  74.            Else
  75.  
  76.                While N Mod 2D = 0D
  77.                    N /= 2D
  78.                    If Factorize.ContainsKey(2D) Then
  79.                        Factorize.Item(2D) += 1D
  80.                    Else
  81.                        Factorize.Add(2D, 1D)
  82.                    End If
  83.                End While
  84.  
  85.                If N > 1D Then
  86.                    Dim I As Decimal = 3D
  87. Again:
  88.                    Dim R As Decimal = Math.Floor(Math.Sqrt(N))
  89.  
  90.                    For X As Decimal = I To R Step 2D
  91.  
  92.                        If N Mod X = 0D Then
  93.  
  94.                            If Factorize.ContainsKey(X) Then
  95.                                Factorize.Item(X) += 1D
  96.                            Else
  97.                                Factorize.Add(X, 1D)
  98.                            End If
  99.  
  100.                            N /= X
  101.                            I = X
  102.  
  103.                            GoTo Again
  104.  
  105.                        End If
  106.  
  107.                    Next
  108.  
  109.                    If N > 1D Then
  110.                        If Factorize.ContainsKey(N) Then
  111.                            Factorize.Item(N) += 1D
  112.                        Else
  113.                            Factorize.Add(N, 1D)
  114.                        End If
  115.                    End If
  116.  
  117.                End If
  118.  
  119.            End If
  120.        End If
  121.  
  122.    End Function
  123.  

Bueno, y algunos se preguntarán como es posible que factorize el número 79.228.162.514.264.337.593.543.950.335 (Decimal más grande de 96 Bits soportado) en menos de 1 segundo :xD

Este algoritmo no se enfrasca en lo que hacen los demás, realizar ese For interminable desde 0 hasta N comprobando la divisibilidad y luego la primadilidad del número divisible, tardarías millones de años literalmente en factorizar el número anterior. Sino que se basa en leyes y propiedades básicas de los primos, por ejemplo:

Un N no puede tener más de un factor que supere su raíz, así que no encontraremos ningún factor que se repita 2 veces al pasar la raíz, de igual forma el primer divisible de N siempre es primo y se encuentra en el rango de 1 a raíz de N.
Código:
Ejemplo:

Los factores del número 123.456.789, su raíz redondeada es 11.111, están entre 2 y 11.111 y no pueden haber factores que se repitan más grandes que dicha raíz.

Debido a que los primos forman a los compuestos, siempre estará primero un primo que un compuesto en la recta numérica ya que el compuesto siguiente al primo esta conformado por un primo anterior.

Código:
Desde el 2 a todos los compuestos le antecede un primo e igualmente están compuestos por el primo que les antecedió

2, 3, 4, 5, 6, 7, 8, 9, ...

Siendo el 2, 3, 5 y 7 primos en esta recta, de manera que para el número 1.023, el primer
divisible que aparece es el 3 y este es primo, Otros divisibles de 1.023 quizás sean compuestos de
3 y debido a esto es imposible que se escape un compuesto en la lista porque siempre estará
primero un primo. Y así con cualquier número entero N que sea compuesto.

Al dividir el primer factor encontrado de N generará un compuesto y los factores de este serán
factores de N, aplicando este procedimiento hasta que se generé un número primo, se podrán
obtener todos los factores de N y cuantas veces estos se repiten. Dicho procedimiento no
consume casi tiempo ya que cada vez el valor generado se va haciendo más pequeño y el primer
factor se encontrará antes de la raíz así que el procedimiento se verá cortado antes de finalizar en
el caso de que N sea compuesto, no es necesario comprobar los números de 2 a raíz de N, se
puede disminuir el tiempo de operación a la mitad si se ignoran los números pares que son
compuestos de 2 y por lo tanto no pueden ser factores de N.
Código:

En el mismo caso del 1.023 el primer divisible es 3 y el resultado es 341, aplicamos el método
nuevamente y el primer divisible es 11 que también es primo eso da como resultado 31 que es un
primo y la operación no se puede continuar, esto arroja que los factores de 1.023 son 3, 11
y 31. Si comprobamos 3 * 11 * 31 = 1.023.


Un número N es cuadrado perfecto de indice I, cuando existe un número X en el rango [2D, Log(N)], que satisfaga la siguiente condición:

Código:
N ^ (1/X) 'Es Entero'
N ^ (1/X) ^ X = N

Lo que quiere decir que si N ^ (1/X) es primo, entonces N es compuesto por I factores de dicho primo. Si en cambio N ^ (1/X) es compuesto, entonces los factores de N serán I-ésimas veces los factores primos de dicho compuesto.

El restante de N después de aplicar el algoritmo, de dividir N por el primer factor que se encuentre hasta que no se encuentre ningún otro, es primo.
17  Programación / .NET (C#, VB.NET, ASP) / Obtener dirección y Tamaño de #strings en: 13 Marzo 2011, 02:53 am
Más descriptivo el titulo es imposible :laugh: como puedo obtener el offset y el size de la tabla de metada #strings en un assembly de .net?, creo que tiene que ver con el ManifestModule al cargar un assembly pero no tengo nada concreto...
18  Programación / .NET (C#, VB.NET, ASP) / Problema con Reflection [Solucionado] en: 13 Marzo 2011, 00:46 am
Despues de cargar un assembly con Assembly.LoadFile como lo descargo?, el problema es el siguiente:

Código
  1. Dim A As Assembly = Assembly.LoadFile("C:\Ejemplo.exe")
  2.  
  3. Dim B As New FileStream("C:\Ejemplo.exe", FileMode.Open)

Lanza un error cuando abro el archivo dice que esta siendo usado en un proceso que es obviamente el mio ya lo comprobe y todo porque cargue el Assembly y ahora no se como se suelta. Que debo hacer para que esto no suceda?, Gracias :)
19  Programación / .NET (C#, VB.NET, ASP) / ReadProcessMemory en Windows 7 en: 28 Febrero 2011, 00:24 am
Código
  1.    Public Function ReadBytes(ByVal handle As IntPtr, ByVal address As Long, ByVal bytesToRead As UInteger) As Byte()
  2.  
  3.        Dim ptrBytesRead As IntPtr
  4.  
  5.        Dim buffer As Byte() = New Byte() {}
  6.  
  7.        ReadProcessMemory(handle, address, buffer, bytesToRead, ptrBytesRead)
  8.  
  9.        Return buffer
  10.  
  11.    End Function

Código
  1. ReadBytes(OpenProcess(PERMISOS_DE_ACCESO, 0, PROCESS_ID), ADDRESS, TAMAÑO_A_LEER)

Una función bastante fácil que lee un array de bytes de un proceso, en XP lee normalmente la memoria de un proceso pero en 7 siempre retorna 0.

Me frustra ya que actulize a 7 teniendo XP, tenia muchos proyectos sobre la memoria y ahora no me funcionan.

Si existe alguna solución, Gracias por adelantado.
20  Programación / .NET (C#, VB.NET, ASP) / Error Access Control Windows 7 en: 22 Febrero 2011, 02:11 am
Tengo el siguiente codigo Set de una propiedad que escribi hace tiempo para Windows XP pero no funciona en Windows 7, debe ser por la cantidad de filtros de seguridad que tiene Windows 7.

Código
  1.   Set(ByVal value As Boolean)
  2.  
  3.            Dim _
  4. AccessDirInfo As New DirectoryInfo(Objeto), _
  5. AccessInfo As DirectorySecurity = AccessDirInfo.GetAccessControl
  6.  
  7.            Dim I_S As New List(Of IdentityReference)
  8.  
  9.            For Each x As String In Users()
  10.                I_S.Add(New NTAccount(x))
  11.            Next
  12.  
  13.            For Each I As IdentityReference In I_S
  14.  
  15.                AccessInfo.PurgeAccessRules(I)
  16.                AccessDirInfo.SetAccessControl(AccessInfo) ''ERROR: Intento de realizar una operación no válida.''
  17.  
  18.                If Not value Then
  19.                    AccessInfo.SetAccessRule(New FileSystemAccessRule(I, FileSystemRights.FullControl, AccessControlType.Allow))
  20.                    AccessDirInfo.SetAccessControl(AccessInfo)
  21.                End If
  22.  
  23.            Next
  24.  
  25.            I_S.Clear()
  26.  
  27.        End Set

Donde esta el comentario es la linea del error y el mensaje que lanza, alguien sabe cual es el problema o la manera de solucionarlo. Estoy en Windows 7.
Páginas: 1 [2] 3 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines