>> nice code for dumping textures inside of push buffer stuff

            /*
            IDirect3DBaseTexture8 *pTexture = 0;

            g_pD3DDevice8->GetTexture(0, &pTexture);
    
            if(pTexture != NULL)
            {
                static int dwDumpTexture = 0;

                char szBuffer[256];

                printf("Texture Time...\n");

                switch(pTexture->GetType())
                {
                    case D3DRTYPE_TEXTURE:
                    {
                        printf("_TEXTURE\n");
                        sprintf(szBuffer, "C:\\Aaron\\Textures\\PushBufferTex - %.03d (0x%.08X).bmp", dwDumpTexture++, pTexture);

                        ((IDirect3DTexture8*)pTexture)->UnlockRect(0);

                        D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
                    }
                    break;

                    case D3DRTYPE_CUBETEXTURE:
                    {
                        printf("_CUBETEXTURE\n");
                        for(int face=0;face<6;face++)
                        {
                            sprintf(szBuffer, "C:\\Aaron\\Textures\\PushBufferTexCube%d - %.03d (0x%.08X).bmp", face, dwDumpTexture++, pTexture);

                            ((IDirect3DCubeTexture8*)pTexture)->UnlockRect((D3DCUBEMAP_FACES)face, 0);
                            
                            D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
                        }
                    }
                    break;
                }
            }
            //*/

<<

>>

    /* TODO: Use new handle wrapping code

    // ******************************************************************
    // * For now, just check for 'special' cases
    // ******************************************************************
    if(strcmp(ObjectAttributes->ObjectName->Buffer, "\\Device\\Harddisk0\\partition1\\") == 0)
    {
        EmuHandle *iEmuHandle = new EmuHandle;

        iEmuHandle->m_Type = EMUHANDLE_TYPE_PARTITION1;

        *FileHandle = PtrToEmuHandle(iEmuHandle);
    }
    else if(strcmp(ObjectAttributes->ObjectName->Buffer, "\\Device\\Harddisk0\\partition1\\TDATA") == 0)
    {
        EmuHandle *iEmuHandle = new EmuHandle;

        iEmuHandle->m_Type = EMUHANDLE_TYPE_TDATA;

        *FileHandle = PtrToEmuHandle(iEmuHandle);

        // TODO: Update IoStatusBlock if necessary
    }
    else
    {
        EmuPanic();
    }
    */
	
<<

	__asm int 3
	wchar_t wszObjectName[160];

	xntdll::UNICODE_STRING    NtUnicodeString;
	xntdll::OBJECT_ATTRIBUTES NtObjAttr;

    setlocale(LC_ALL, "English");
    mbstowcs(wszObjectName, ObjectAttributes->ObjectName->Buffer, 160);

	NT_RtlInitUnicodeString(&NtUnicodeString, wszObjectName);

	// Initialize NtObjAttr
	NtObjAttr.Length = sizeof(xntdll::OBJECT_ATTRIBUTES);

	InitializeObjectAttributes(&NtObjAttr, &NtUnicodeString, ObjectAttributes->Attributes, ObjectAttributes->RootDirectory, NULL);

    NTSTATUS ret = NT_NtCreateFile
    (
        FileHandle, DesiredAccess, &NtObjAttr, (xntdll::IO_STATUS_BLOCK*)IoStatusBlock,
        (xntdll::LARGE_INTEGER*)AllocationSize, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, NULL, NULL
    );

	if(FAILED(ret))
		MessageBox(g_hEmuWindow, "Bad!", "Cxbx", MB_OK);
	else
		MessageBox(g_hEmuWindow, "Good!", "Cxbx", MB_OK);


<<

// ******************************************************************
// * calculate TLS adjustment
// ******************************************************************
uint32 TlsAdjust = 0;

if(x_Xbe->m_TLS == 0)
    TlsAdjust = -1;
else
{
    // ******************************************************************
    // * necessary tls adjustment values
    // ******************************************************************
    uint32 TlsZF = x_Xbe->m_TLS->dwSizeofZeroFill;
    uint32 TlsEA = x_Xbe->m_TLS->dwDataEndAddr;
    uint32 TlsSA = x_Xbe->m_TLS->dwDataStartAddr;
    
    // ******************************************************************
    // * calculate tls adjustment
    // ******************************************************************
    TlsAdjust  = (TlsZF - TlsSA) + TlsEA + 0x0F;
    TlsAdjust &= 0xFFFFFFF0;
    TlsAdjust += 4;
}
