Problem mit IOCTL_PAR_QUERY_INFORMATION



  • Hi!
    Ich wollte mich etwas näher mit dem Parallelport auseinandersetzen, und da dachte ich, ich fang mal mit DeviceIoControl an 😉
    Folgendes kleines Beispiel sollte eigentlich den Druckerstatus abfragen, aber alles, was rauskommt, ist ein unfreundliches ERROR_INVALID_FUNCTION 😞
    Was ist da falsch? (Ich benutze Win2000 SP4, falls das wichtig sein sollte)
    Grüße

    #include <windows.h>
    #include <winioctl.h>
    #include <ntddpar.h>
    
    int main()
    {
    	DWORD gle = 0;
    	HANDLE h = CreateFile("\\\\.\\LPT1",
    		GENERIC_READ | GENERIC_WRITE,
    		0, NULL, OPEN_EXISTING, 0, NULL);
    
    	if(h != INVALID_HANDLE_VALUE)
    	{
    		PAR_QUERY_INFORMATION pqi = {0};
    		DWORD dwRet = 0;
    		BOOL bSuccess = FALSE;
    
    		bSuccess = DeviceIoControl(h,
    			IOCTL_PAR_QUERY_INFORMATION,
    			NULL, 0,
    			&pqi, sizeof(pqi),
    			&dwRet, NULL);
    
    		gle = GetLastError();
    
    		// bSuccess ist immer FALSE
    		// gle ist immer 1 (ERROR_INVALID_FUNCTION)
    
    		CloseHandle(h);
    	}
    	else
    	{
    		gle = GetLastError();
    	}
    
    	return 0;
    }
    


  • ohne das je vorher benutzt zu haben... in der MSDN steht man muss eine Kernel32.lib einbinden, hast du das gemacht? wenn es keine kompilierfehla gibt kann es eigentlich nur an dem liegen...

    cya 🙂



  • Daran kann's eigentlich nicht liegen, die lib habe ich eingebunden. CreateFile und DeviceIoControl kommen z.B. auch beide aus der kernel32.dll. Da sich der Linker nicht beschwert und die Funktionen (CreateFile wenigstens) auch ordnungsgemäß ausgeführt werden, muss der Fehler irgendwo anders liegen.



  • Bist du dir sicher, dass vorher noch kein Fehler auftritt?



  • Bin mir sicher, dass es vorher keinen Fehler gibt. Dann wäre nämlich h gleich INVALID_HANDLE_VALUE. Meistens ist es aber ein Wert wie 0x000000b6. CreateFile klappt also, aber das darauffolgende DeviceIoControl nicht.
    Oder muss ich vielleicht vorher noch irgendwelche Zugriffsrechte setzen?


Anmelden zum Antworten