ich weiß ist bestimmt ein bisschen spät aber,
das programm das du gepostet hast "switcht" nicht von Ring 3 in Ring 0, es lädt einen treiber, der läuft in Ring 0, dann öffnest du nen IO kanal
hFile = CreateFile("\\\\.\\HideProc",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
der treiber hat sowas ähnliches im code, grad nicht am richtigem pc um dir die referenz rauszusuchen, aber egal.
Du schreibst dann nur noch dem treiber die PID und der hookt dann warscheinlich in der SSDT ( System Service Discriptor Table ) die funktion auf die das ring 3 equivalent zugreift.
hallo liebe Leute ,
wie der Titel schon sagt bin ich da auf ein kleines Problem mit der Funktion
SetConsoleDisplayMode gestoßen.Und zwar nutze ich die mehere Bildschirme, aber
mein zweiter im Bunde will irgendwie nichts mehr ausgeben sobald ich in den
Vollbildmodus wechsel,da ich nun den guten nicht als primäre Anzeige für Windows
nutzen kann, wollt ich mal fragen ob es dafür eine Lösung gibt und wie diese in
etwa aussieht.
guggstdu schrieb:
Mach dir doch ein Win9x/ME oder Win2k/XP in einer Virtuellen Machine. Ist immer mal günstig, wenn man ein anderes OS braucht.
Danke für den Tipp!
Einfacher kann ich meinen alten PC 'Charlie' wie vorgeschlagen mit Windows9x einsetzen. Der verweigert nicht die Ausführung wie PC 'David' mit WinVista.
hallo zusammen,
ich bin C++-anfänger und arbeite mich gerade in win32 ein. ich hab hin und wieder kleinere fragen. deswegen suche ich jemanden, der mir hin und wieder eine kleine hilfestellung geben kann etc. und MSN hat. bitte meldet euch bei mir oder schreibt mich einfach in msn an.
gruß mnapster
Hier mal wenig hilfe zum zählen,
int main()
{
int zufalsZahlen[100]; // Zufalszahlen
int anzahlDerZahlen[20]; // anzahl der jeweiligen Zahlen 1 bis 20
for(int i=0;i<20;i++) // Zahlen Zähler auf null setzen für alle 20 zahlen
{
anzahlDerZahlen[i]=0;
}
for(i=0; i<100; i++)
{
zufalsZahlen[i] = rand()%20+1; // die 100 Zufalszahlen zwisch 1 und 20 erzeugen
anzahlDerZahlen[zufalsZahlen[i]-1]++; // die 20 Zähler der Zahlen 1 bis 20 entsprechend setzen
}
for(i=0;i<20;i++)
{
printf("Anzahl der Zahl %d: %d\n",i+1,anzahlDerZahlen[i]); // Ausgabe der Anzahl der Zahlen 1 bis 20
}
getchar();
}
Du darfst auch nicht vergessen dass arrays bei Null anfangen und nicht bei 1
Falls es noch jemanden interessiert, es gibt noch ne andere Möglichkeit,
allerdings nur noch durch archive.org zu finden:
http://web.archive.org/web/20050124020708/www.cpp-programming.de/quellcodes/viewcode.php?id=018
Also hat sich gerade erledigt^^, da mir aufgefallen ist, dass ich
timeGetTime() - timeStart
aufrufen muss.
Vorher habe ich da so gemacht:
timeStart - timeGetTime()
Das hat dann wahrscheinlich einen Pufferüberlauf oder so gegeben.
Vielen Dank,
Thindia80
Hätte sonst auch in der Doku gestanden:
WriteConsole fails if it is used with a standard handle that is redirected to a file
http://msdn.microsoft.com/en-us/library/ms687401(VS.85).aspx
Ich versteh auch ehrlich gesagt nicht alles was dahinter steckt!
Vielleicht ist dieser thread ein bisschen abgedrifftet und ist jetzt nicht mehr im richtigen Forum... Ich hab jetzt im Intelforum was gepostet:
http://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/69242/
Hallo,
auch ich versuche ein einzelnes Zeichen an der Konsole einzufärben.
Als Programmierumgebung benutze ich Dev C++ (in Version 4).
Leider bekomme ich immer die Fehlermeldung 'implicit declaration of funcion snprintf...'.
Selbst das Beispiel von dieser Seite: http://de.wikibooks.org/wiki/C-Programmierung:_stdio.h#int_snprintf.28char_.2Adest.2C_size_t_destsize.2C_const_char_.2Aformat.2C_....29
gibt mir den gleichen Fehler aus.
Was muss ich machen, damit snprintf auch erkannt wird?
Danke
Dickus
;fricky schrieb:
windosen haben alle 'ne GUI, auch die server-versionen.
Ich hatte irgendwo gelesen, daß man das bei 2008 auch weglassen kann. Scheinbar hast du aber doch irgendwie recht:
http://www.symlink.ch/kolumnen/07/07/11/2211203.shtml
Aber vielleicht die nächste Version...
Sohn schrieb:
Ich hab mal eine .txt im Hexeditor geöffnet und gesehen, '\n' für 0x0D0A steht?
Nicht ganz. 0x0D0A besteht aus zwei Byte, wobei das Byte mit dem Wert 0x0A dem Zeilenumbruch '\n' und 0x0D dem Wagenrücklauf '\r' entspricht.
Das ganze zusammen ergibt das Carriage Return/Line Feed Paar "\r\n" und ist
typisch für Windows Textdateien. Unter Windows wird das Lesen/Schreiben im Textmodus
und im Binärmodus unterschieden. Im Textmodus bekommst du das '\r' beim Lesen nicht zu sehen, im Binärmodus ja:
#include <stdio.h>
int eret()
{
fprintf( stderr, "%s\n", strerror(errno));
fcloseall();
return 1;
}
int main()
{
FILE* in;
char* fname = "test.txt";
char c = 0;
if ( NULL == (in = fopen ( fname, "r" ))) // Textmodus.
return eret();
while (EOF != ( c = fgetc(in)))
if ( c == '\r' )
puts( "Text mode, found carriage return!" );
fclose(in);
if ( NULL == (in = fopen ( fname, "rb" ))) // Binärmodus.
return eret();
while (EOF != ( c = fgetc(in)))
if ( c == '\r' )
puts( "Binary mode, found carriage return!" );
fclose(in);
return 0;
}
Beim Schreiben im Textmodus unter Windows wird das '\n' durch ein "\r\n" ersetzt.
Sohn schrieb:
Wie wird jetzt eine Datei in C++ geöffnet?
In C++ funktioniert Lesen/Schreiben so: http://www.c-plusplus.net/forum/viewtopic-var-t-is-251703.html
Da lassen sich mit den Flags ios::binary, ios::text die entsprechenden Modi setzen.
Sohn schrieb:
Alles hexadezimal ausgelesen?
Der Dateiinhalt steht zunächst binär, als eine Folge von Einsen und
Nullen im Speicher. Das lässt sich oktal, dezimal, hexadezimal etc. interpretieren.
Wenn der Threaderöffner C++ lernen möchte, dann würde ich ihm auch zur C++ Syntax raten:
#include <iostream>
#include <string>
#include <fstream> // Dateioperationen.
using namespace std;
int eret()
{
cout << strerror(errno) << endl;
return 1;
}
int main()
{
string fname = "test.dat";
float var = 0.0; // Hier kommt der Inhalt aus Adresse 0x04 rein.
unsigned adress = 0x04;
////////////////////////////////////////////////////////////////
// Eine Datei mit dem Namen fname wird erzeugt und mit zwei
// Floatwerten beschrieben.
ofstream out;
out.open ( fname.c_str() );
if ( false == out.is_open() )
return eret();
out
<< 1.1 // Adresse: 0x00
<< 2.2; // Adresse: 0x04
out.close();
////////////////////////////////////////////////////////////////
// Die zuvor erzeugte Datei wird eingelesen, der Dateizeiger wird
// an Position 0x04 gesetzt, ein Floatwert wird eingelesen und ausgegeben.
ifstream in;
in.open ( fname.c_str() );
if ( false == in.is_open() ) // Wenn die Datei nicht geoeffnet ist,
return eret(); // Programm verlassen.
in.seekg(adress); // Dateizeiger an Position 0x04 setzen.
if ( in.eof() == false ) // Wenn wir nicht am Dateiende sind,
in >> var; // Dateiinhalt in Variable schreiben.
in.close();
////////////////////////////////////////////////////////////////
cout << var << endl;
return 0;
}
Wenn C++, dann auch std::string, ausser du hast einen guten Grund darauf zu verzichten (einen wirklich guten).
Ansonsten noch einige Anmerkungen:
delete [] name;
Wo ist denn das new zu diesem delete. In man strdup steht, dass der Speicher mit malloc angefordert wird und mit free freigegeben werden kann.
Hallo folgendes Prog lässt sich einwandfrei kompilieren.
Siehste ja selbst, dass erfolgreiche Kompilation nicht die Korrektheit des Programms garantiert. Das ist in den seltesten Faellen so.
Eingaben mache ich so in etwa ganz gern:
string input()
{
string buf;
buf.clear();
getline ( cin, buf );
return buf;
}
void menu()
{
string inbuf;
do{
cout << "Type some stuff and hit enter or hit enter to quit." << endl;
inbuf = input();
if ( !inbuf.empty())
cout << "You have entered: " << inbuf << endl;
}
while ( inbuf.empty() == false );
}
int main()
{
menu();
return 0;
}
Wenn es einfach nur darum geht, auf die Eingabetaste zu warten, kann man input()
aufrufen, ohne die Rückgabe abzuholen.
Gruß,
B.B.