for-Schleife (C)

Hi,

Ich krieg jetzt gleich noch nen Anfall, was ist denn daran bitte falsch:

Code:
for(int Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++)
	DriverObject->MajorFunction[Index] = GenericDispatchHandler;
Es handelt sich dabei übrigens um einen NT-Treiber, daher verwende ich den Compiler, der beim DDK beiliegt

Das Build-Tool gibt folgendendes aus:
Code:
main.c(35) : error C2143: syntax error : missing ';' before 'type'
main.c(35) : error C2143: syntax error : missing ';' before 'type'
main.c(35) : error C2143: syntax error : missing ')' before 'type'
main.c(35) : error C2143: syntax error : missing ';' before 'type'
main.c(35) : error C2065: 'Index' : undeclared identifier
main.c(35) : error C4552: '<=' : operator has no effect; expected operator with side-effect
main.c(35) : error C2059: syntax error : ')'
main.c(36) : error C2146: syntax error : missing ';' before identifier 'DriverObject'
main.c(36) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
main.c(36) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
main.c(36) : error C2143: syntax error : missing ';' before 'identifier'

Gruß Chris
 
Kann es sein, dass der Compiler ein Problem damit hat, dass du Index innerhalb des Schleifenkopfes deklarierst? Versuch's evtl. mal so:
Code:
int Index;
for( Index = 0; ....

Wenn es daran nicht liegt, dann poste mal den Code davor.
 
Hi,

Hier erstmal die komlette DriverEntry Routine, mit deiner Deklaration...

Code:
NTSTATUS DriverEntry(IN PDRIVER_OBJECT  DriverObject, IN PUNICODE_STRING  RegistryPath)
{
	
	UNICODE_STRING NTDeviceName;
	UNICODE_STRING Win32DeviceName;
	NTSTATUS ntStatus;
		
	// NT-Device Objekt erzeugen 
	RtlInitUnicodeString(&NTDeviceName, _NTDeviceName);
	
	ntStatus = IoCreateDevice(DriverObject, 0, &NTDeviceName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &MainDevice);
	if(!NT_SUCCESS(ntStatus))
	{
		return(ntStatus);
	}
	
	// Symbolischen Link für das NT-Device Objekt erzeugen
	RtlInitUnicodeString(&Win32DeviceName, _Win32DeviceName);
	
	IoCreateSymbolicLink(&Win32DeviceName, &NTDeviceName);
	if(!NT_SUCCESS(ntStatus))
	{
		IoDeleteDevice(MainDevice);
		return(ntStatus);
	}
	
	// Dispatch Routinen eintragen
	int Index;
	for(Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++)
		DriverObject->MajorFunction[Index] = GenericDispatchHandler;
			
	DriverObject->DriverUnload = Platinum_Unload;
	
	return(STATUS_SUCCESS);
	
}

Der Compiler spuckt jetzt folgendes aus:
Code:
main.c(35) : error C2143: syntax error : missing ';' before 'type'
main.c(36) : error C2065: 'Index' : undeclared identifier

Zeile 35 ist die, wo die Variable Index deklariert wird...


Gruß Chris
 
mache das int Index mal unter NTSTATUS ntStatus;

wir hatten da bei der microprozessorprogrammierung genau solch ein problem mal
 
du kannst keine variablen in der for schleife deklarieren!
desweiteren mach mal ein { und } passend in die schleife

LG,weau
 
in c++ kann man sehr wohl variablen in for-schleifen deklarieren. handelt es sich jetzt hier um c oder c++? die {} sollten kein problem darstellen, solange nur ein befehl in der schleife ist.
bin mir net sicher aber kann es sein das "Index" schon mal irgendwo deklariert wurde, in einer header-datei oder so? vielleicht isses ja n reserviertes wort, probier doch mal nen anderen variablennamen aus..

mfg
 
jo sorry habs grad gelesen ^^ aber bei solchen standart-variablennamen bin ich immer vorsichtig, ob die nich schon vergeben sind. also nen anderen namen wär wirklich mal ne idee zum ausprobieren!
 
Hi,

also wenn ich Index direkt nach ntStatus deklariere funktioniert es... Danke, um ein Haar hätte meine Tastatur drunter leiden müssen ;)

Das ganze soll C sein, nur als was das interprätiert wird weiss ich nicht,
aber das VS mosert auch nicht rum wenn ich den Zähler der for-Schleife erst in dieser deklariere,
wobei hier gillt auch wieder, kein Plan als was das dann interprätiert wird (C oder C++)

Wird wohl Zeit, das Microsoft den Windowskernel durch ein CLR ersetzt, damit man seine Treiber in .Net schreiben kann :D
Ich zieh schon mal den Kopf ein, falls ein Assembler freak das ließt 8)

Gruß Chris
 
Zurück
Oben