• View Communities
    • Citrix Developer Network
      The place for unfiltered straight talk on Citrix products. Blogs, code downloads, best practices, APIs, and more can all be found here.
    • Citrix Ready Community Verified
      Does it work with Citrix? Application compatibility questions are a thing of the past with the new Citrix Community Verified site.
    • Blogs
      Learn the latest from the Citrix employees who are building application delivery infrastructure technologies.
    • Blogosphere
      The Citrix Blogosphere is a window into the thousands of conversations taking place about Citrix and Application Delivery.
  •  Sign In
The Citrix Blog
XenApp Blogs
Product news, tips, and tricks.
Permalink | Twitter Post to Twitter | Comments (0) | Views (1091) |

posted by Vinny Sosa

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (2821) |

posted by Peter Schulz

I'm pleased to announce that Workflow Studio 2.0 is now available:

Download Workflow Studio 2.0 (MyCitrix login required)

This release has a number of great new features and is a seamless upgrade from version 1.x. Here are some of the key new features:

  • Native XenApp activity libraries (and many other additional activities)
  • Remote runtimes
  • Simplified management interface
  • Enhanced security features
  • Simplified installation and configuration
  • Improved SDK
  • Simplified workflow Designer
  • Globalization support

I will post some more blogs over the next few days with more details on the above features and will also be updating the CDN site with many new articles, so subscribe to the Workflow Studio blog and head over to the Workflow Studio CDN site and subscribe for updates on CDN as well.

Feel free to leave feedback in comments or email me directly.

Workflow Studio will be included with XenApp Feature Pack 2

Learn more about Citrix XenApp 5 Feature Pack 2

Follow XenApp on | | |

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1199) |

posted by Vinny Sosa

You might have seen my blog post on application virtualization with VM hosted apps and that of Harry Labana on the same topic. With this new technology planned for Citrix XenApp 5 Feature Pack 2, In previous versions on XenApp we've said we have "complete application compatibility" or the "broadest application compatibility" but as applications continue to evolve and change we need to introduce technology that continues to deliver on that promise. VM hosted apps lets us do that. If you haven't seen it, VM hosted apps let's you deliver virtual applications from centrally hosted Windows XP, Windows Vista or Windows 7 virtual machines.

What's interesting is that this feature makes XenApp the solution with the broadest number of options for delivering applications to users on any device in a seamless and high performance way. Check it out...

  • Way 1 & 2 - Deliver server-hosted apps from XenApp running on Windows Server 2003 and Windows Server 2008.
  • Way 3 - Deliver apps from XenApp directly to the user device via application streaming. This works great for Windows XP, Windows Vista and Windows 7 desktops.
  • Way 4, 5 & 6 - Deliver VM hosted apps from XenApp as hosted on centralized Windows XP, Windows Vista and Windows 7 desktops
  • Way 7 - Deliver server-hosted apps from XenApp running on Sun Solaris, IBM AIX and HP UX

Now you can certainly argue that we actually have 9 ways if you count the UNIX as 3 platforms. You can also argue that we have 4 or 3 depending on how you group them. But there is no arguing that XenApp gives you the most options for delivering applications to any user on any device in the most seamless and high performance way while ensuring the highest level of application compatibility. What's more if you consider the fact that we've already announced we're working on integrating App-V support into XenApp and the inevitable support for Windows Server 2008 R2, you can add 2 more ways to this stack. You might even say that since we also support the use of the RDP client as a fallback option for applications delivered via XenApp Web interface that adds another one. So, all in all I've mentioned 12 different ways of delivering apps via XenApp.

Now, you can argue that 100% application compatibility is a nice round number to use for marketing but you've at least got to agree that XenApp continues to remain pretty darned close. What's your opinion?

Check out the XenApp 5 Feature Pack 2 blog series

Follow XenApp on | | |

Download XenApp technology previews

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1545) |


Are you planning to attend Intel Developer Forum 2009 next week? If so, you will see Citrix in every corner of the event!

Stop by the Citrix booth (#501) next week at San Francisco's Moscone Center to see demos of our Citrix Delivery Center solutions. We will also showcase demos of Citrix XenClient, our joint collaboration with Intel to develop a local desktop virtualization platform.

In addition, Citrix will be featured in the Intel Virtualization Pavilion and Intel vPro Zone Communities. Within the Communities we'll showcase XenClient and also how Citrix XenServer leverages the benefits of Intel Xeon processors for Citrix XenApp and Citrix XenDesktop workloads. And as if that weren't enough, we will also have a demo of SR-IOV with Citrix XenServer at Intel's booth.

Citrix will also be featured within several breakout sessions at the event. Stop by the session "Hosted, Streamed, and Local Bare Metal Desktop Virtualization with Citrix XenDesktop and Citrix XenClient" on September 22nd from 3-3:50pm to hear Peter Blum introduce our desktop virtualization vision and discuss Citrix XenClient.

Also, Simon Crosby is participating in a cloud virtualization panel discussion alongside other industry-leading companies. This session is scheduled for September 22nd from 5-5:50pm.

In short...or maybe not that short...if you plan on attending the event, you'll have a lot of opportunities to meet with Citrix and learn how Citrix is working with Intel.

We look forward to seeing you there and we guarantee you won't be able to miss us! Learn more about Intel Developer Forum or register to attend here.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1391) |

posted by Rich Crusco

Citrix User Group Denmark session on Whats new in Provisioning Server. The Session was delivered by Henrik Poulsen from Citrix Consulting, and Henrik covered whats new and how does Provisioning Server fit into the scheme of a dynamic delivery center.

Dansk Citrix User Group Session om Whats new in Provisioning Server. Sessionen blev leveret af Henrik Poulsen fra Citrix Consulting, og Henrik afdækkede hvad der er nyt samt hvor Provisioning Server passer ind i det store dynamiske delivery center.

Click below to continue to Dansk Citrix User Group:
http://www.dkcug.dk

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (1) | Views (1277) |

posted by Rich Crusco

Citrix User Group Denmark session on XenApp Power and Capacity Management the feature with the upcoming feature pack two for XenApp 5.0. The session is delivered by Jacob Berg, Application delivery Consulting.

Dansk Citrix User Group session om XenApp Power and Capacity Management en kommende feature i XenApp 5.0 feature pack to. Sessionen blev leveret af Jacob Berg, Application delivery Consulting

Click below to continue to Dansk Citrix User Group:
http://www.dkcug.dk

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (1) | Views (1471) |

posted by Joseph Nord

I received an interesting inquiry recently.  Given my post on Never Deploy to XenApp Servers, how do you stop deploy from happening for hosted desktop?   Excellent question!

Here's the situation.  Happy XenApp Customer (they are all happy) who uses Application Streaming to deliver applications to their XenApp servers as well as stream to client, primarily for offline access.  The applications are published to the user as offline enabled and this works swell to trigger the deploy operation that is required to execute the application when disconnected from the corporate network and also works swell to not trigger Deploy in the XenApp hosted case.

Quick refresher on Deploy

The Deploy space is a COPY of all the needed stuff from the Application Hub, but it is local to the execution machine.  The Deploy space makes it possible for the streaming client to support application usage even when disconnected from the network.  The Deploy space is generally in \Program files\Citrix\Deploy and the execution cache space is generally in \Program files\Citrix\RadeCache. 

At runtime, the streaming client runtime fills the execution space as needed by copying content from the Application Hub - or if Deployed, from the Deploy space.  Other than one being remote and the other being local, the activity of the client is the same whether "offline" or "online".  Technically, "Deploy" enables streaming from one side of the hard disk to the other and this keeps life pretty simple from a programming standpoint.   I thought it up back in the Tarpon development and I'm still pretty happy with myself.

Deploy is automatically not done on XenApp Servers

It may seem like a good idea to Deploy to the XenApp Servers, but I have already squashed that myth and apparently did a good job there because the corollary, "Never Deploy to XenDesktop" has also been heard.

Back to the customer.  They have XenApp running good and are engaging XenDesktop.  Application Streaming is delivering the applications to the XenApp servers as well as to the end user machines (notebooks). 

Here's the thing that's not always obvious.  The streaming client KNOWS that Deploying to XenApp Servers is a bad idea.  If you publish an application to a bunch of users and offline enable the applications AND if you publish the applications to hosted execution, a single user can use both without triggering a Deploy on the XenApp server.  

If the user is running the application server side, the streaming client is still involved but it knows that it is running ON a XenApp Server, so it SKIPS the Deploy.  This is the right thing to do.  If the admin doesn't like that, they can still command a Deploy to occur on the server by directly calling the deploy utility, RadeDeploy.exe, but again, you shouldn't do that.

The problem

The customer is now engaging XenDesktop and have connected the hosted desktops to the App Streaming infrastructure from the existing XenApp configuration.  Here, the streaming client is running on the hosted desktop and ... when performing its app launch concludes that this is a client side execution and background copies down all the bits for offline execution. This is bad.

Here's a good write up on the percentage of space that is used for online vs. offline execution.

The point: Lots of disk writes start happening to copy the Deploy content down from the Application Hub to place them in the Deploy space where they will exist and get copied again into the RadeCache.  All of this is bad to the layers of cake.  We want to minimize disk WRITES.  Disk writes are backed up either by Xen/Other Virtual Machine manager or by Provisioning Services.  Either way, large writes by large numbers or users are bad.  Beyond being slow, these writes will occupy space in the per-user write back cache; which is discarded on logoff, so this whole thing will repeat on the next logon.  

The solution

The Deploy should not occur!  But it does.  In a "correct" world, the streaming client would be XenDestop aware as it is XenApp aware.  If running "hosted", don't Deploy!  We do not live in a correct world.  My initial guidance to the folks that asked me about this was "erase \program files\citrix\streaming client\radedeploy.exe".  All happy with myself because I KNOW that the streaming client shells to the utility to perform the deploy.

With the utility "missing", the streaming client will have no choice but to push on without the deploy.
Survey says.... didn't work. 

Instead of "pushing on", the streaming client declared failure and aborted the app launch.  Aargh.

Beautiful part of this is that I didn't have to actually try it.  Smart folks on the other side, all I had to do was keep coming up with ideas.  

Second round: Replace RadeDeploy.exe with a program that does nothing, but returns "success" return code.

Survey says.... Success!

The only utility I had handy to do this is one I wrote a very long time ago to use for remarking out RUN= statements from the Windows registry.  Source is included - please compile it yourself before putting in production.  For the programmers in the room, said program is "Hello world" minus the printf.  In the common image where the streaming client is installed, copy nop.exe to RadeDeploy.exe. 

Back to the Deploy activity

The streaming client "shells" to RadeDeploy.exe which is really "nop.exe", which returns 0 as RC.  With the Deploy "successful", the launch proceeds with no error, AND the Deploy never happens.  Perfect!

I see a future where the streaming client will be XenDesktop aware and skip the Deploy.  Until then, this technique may prove useful.  If you have other creative solutions to this problem, please share them here.

Next step is getting the RadeCache space available to everyone from a single source, read-only and fully populated at the get-go.

Joe Nord
Product Architect Application Streaming

Citrix Systems

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1274) |

posted by Rich Crusco

Registration is now open for this years Autumn 2009 CUGtech event in Geilo, Norway on Oct 7th through Oct 9th. It looks like there might also be a discount for the event by registering as a member.

Register here to participate at CUGtech Autumn 2009

  • You will have to pay directly to the hotel when checking out Friday, using creditcard or cash.
  • Register as a member now and get 50% discount for the membership valid thru 31/12-09.
  • Only members can attend Master Classes, and get the special member price for the conference.

Click below to continue to registration:
http://cug.no/cugtech-autumn-2009/register/

Here is a nice view of the Geek Wonderland where the event will be hosted.


Geilo, Norway

Click below to learn more about the event:

CUGtech Autumn 2009: http://cug.no/cugtech-autumn-2009/
Location: http://cug.no/cugtech-autumn-2009/location/
Transport: http://cug.no/cugtech-autumn-2009/transport/
Speakers: http://cug.no/cugtech-autumn-2009/speakers/
Agenda: http://cug.no/cugtech-autumn-2009/agenda/
Master Classes: http://cug.no/cugtech-autumn-2009/master-classes/
Register: http://cug.no/cugtech-autumn-2009/register

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (842) |

posted by Futoshi Baba

Motivation
I had an issue I have to investigate at the begining of 2009. Since W2K8 seems to have some enhancement regarding security consideration. This was an example in a case that WMI printer provider query, which is like "SELECT * FROM __InstanceCreation Event WITHIN 1 WHERE TargetInstance ISA 'Win32_Printer'" through WMI provider context from Application. This query led to perform SPOOLSS!EnumPrintersW() within spooler context with "NT AUTHORITY\SYSTEM". Unfortunately, As a resulf ot that, we came across the follwoing Event Log.
Implementation of TPrintProvider class introduced into win32spl.dll since W2K8 caused this.


EventSource: "SpoolerWin32SPL"
EventId: 4


Debug Log

THREAD 89b62710 Cid 0960.0b20 Teb: 7ffda000 Win32Thread: ff5dea50 WAIT: (UserRequest) UserMode Non-Alertable
898ba718 SynchronizationEvent
89a177b8 SynchronizationEvent
IRP List:
89a50310: (0006,0220) Flags: 00060000 Mdl: 00000000
Not impersonating
DeviceMap 832087c0
Owning Process 0 Image: <Unknown>
Attached Process 89becc80 Image: rscorsvc.exe
Wait Start TickCount 17687 Ticks: 40 (0:00:00:00.625)
Context Switch Count 1890
UserTime 00:00:00.093
KernelTime 00:00:00.093
Win32 Start Address ZCollect!_threadstartex (0x3304a4ec)
Stack Init 8ce63000 Current 8ce628c0 Base 8ce63000 Limit 8ce60000 Call 0
Priority 12 BasePriority 10 PriorityDecrement 0 IoPriority 2 PagePriority 5
ChildEBP RetAddr Args to Child
8ce628d8 816b83bf 89b62710 816f9920 89b62798 nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4])
8ce6291c 816b53cf 89b62710 00000000 00000002 nt!KiSwapThread+0x44f
8ce62970 81819ed4 00000002 8ce62aa8 00000001 nt!KeWaitForMultipleObjects+0x53d
8ce62bfc 81819c43 00000002 00000001 00000000 nt!ObpWaitForMultipleObjects+0x256
8ce62d48 81658a7a 00000002 01c3f5ec 00000001 nt!NtWaitForMultipleObjects+0xcc
8ce62d48 77689a94 00000002 01c3f5ec 00000001 nt!KiFastCallEntry+0x12a (FPO: [0,3] TrapFrame @ 8ce62d64)
01c3f598 77689244 7607c3e4 00000002 01c3f5ec ntdll!KiFastSystemCallRet (FPO: [0,0,0])
01c3f59c 7607c3e4 00000002 01c3f5ec 00000001 ntdll!ZwWaitForMultipleObjects+0xc (FPO: [5,0,0])
01c3f638 777c0208 01c3f5ec 01c3f660 00000000 kernel32!WaitForMultipleObjectsEx+0x11d (FPO: [Non-Fpo])
01c3f68c 7720ab28 000002dc 01c3f6d4 ffffffff USER32!RealMsgWaitForMultipleObjectsEx+0x13c (FPO: [Non-Fpo])
01c3f6b4 7720ac88 01c3f6d4 ffffffff 01c3f6e4 ole32!CCliModalLoop::BlockFn+0x97 (FPO: [Non-Fpo])
01c3f6dc 77317b73 ffffffff 0020cdb0 01c3f7e8 ole32!ModalLoop+0x5b (FPO: [Non-Fpo])
01c3f6f8 77318b68 00000000 01c3f7fc 00000000 ole32!ThreadSendReceive+0x12c (FPO: [Non-Fpo])
01c3f720 773189d4 01c3f7e8 00243c28 01c3f844 ole32!CRpcChannelBuffer::SwitchAptAndDispatchCall+0x194 (FPO: [Non-Fpo])
01c3f800 7720ad2e 00243c28 01c3f928 01c3f90c ole32!CRpcChannelBuffer::SendReceive2+0xef (FPO: [Non-Fpo])
01c3f81c 7720ace0 01c3f928 01c3f90c 00243c28 ole32!CCliModalLoop::SendReceive+0x1e (FPO: [Non-Fpo])
01c3f894 7722e688 00243c28 01c3f928 01c3f90c ole32!CAptRpcChnl::SendReceive+0x73 (FPO: [Non-Fpo])
01c3f8e8 76e5364e 00243c28 01c3f928 01c3f90c ole32!CCtxComChnl::SendReceive+0x1c5 (FPO: [Non-Fpo])
01c3f900 76e536af 03ad7ecc 01c3f9c4 76e533e2 RPCRT4!NdrProxySendReceive+0x43
01c3f90c 76e533e2 81d96d3a 01c3fdc4 070001f3 RPCRT4!NdrpProxySendReceive+0xc (FPO: [0,0,0])
01c3fd84 76e535f4 718b2ba8 718b27de 01c3fdc4 RPCRT4!NdrClientCall2+0x5e9
01c3fdac 76dee20e 01c3fdc4 00000017 01c3fdfc RPCRT4!ObjectStublessClient+0x6f
01c3fdbc 718e6374 03ad7ecc 001e28fc 0020ed9c RPCRT4!ObjectStubless+0xf
01c3fdfc 3650cae8 001e28fc 0020ed9c 0020ed9c fastprox!CWbemSvcWrapper::XWbemServices::ExecNotificationQueryAsync+0x91 (FPO: [Non-Fpo])
01c3fe44 365050d5 00000001 029309e8 36505851 ctrx_ext!CPrinterTracker::DetectPrinterCreates+0x118 (FPO: [Non-Fpo]) (CONV: thiscall)
01c3fe50 36505851 00000005 00ed49fc 3650804d ctrx_ext!CCtrxExt::InitMonitoring+0xd5 (FPO: [Non-Fpo]) (CONV: thiscall)
01c3fe5c 3650804d 00000005 36505287 00000001 ctrx_ext!CCtrxExt::OnStartupPhase+0x141 (FPO: [Non-Fpo]) (CONV: thiscall)
01c3fe64 36505287 00000001 00000005 00ed4998 ctrx_ext!CCtrxExt::_NotifyEvent+0x2d (FPO: [Non-Fpo]) (CONV: thiscall)
01c3fe74 33009c29 029309e8 00000001 00000005 ctrx_ext!_IMPAExtensionImpl<CCtrxExt>::NotifyEvent+0x27 (FPO: [Non-Fpo]) (CONV: stdcall)
01c3fe98 33010f39 00000001 00000005 81d93690 ZCollect!MPACollector::NotifyEvent+0x53 (CONV: thiscall)
01c3fecc 3301443c 00000005 00000000 00ed0cb8 ZCollect!QThread::DoPhasedStartup+0x17a (CONV: thiscall)
01c3ff10 3302b6d2 00ed4698 81d93714 00000000 ZCollect!QThread::StartQueue+0x197 (CONV: thiscall)
01c3ff48 3304a4c6 00ed0cb8 81d937dc 00000000 ZCollect!StartQReader+0x30 (CONV: stdcall)
01c3ff80 3304a56b 00000000 76074911 00edbeb8 ZCollect!_callthreadstartex+0x1b (FPO: [Non-Fpo]) (CONV: cdecl)
01c3ff88 76074911 00edbeb8 01c3ffd4 7766e4b6 ZCollect!_threadstartex+0x7f (FPO: [Non-Fpo]) (CONV: stdcall)
01c3ff94 7766e4b6 00edbeb8 76ac79b1 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
01c3ffd4 7766e489 3304a4ec 00edbeb8 ffffffff ntdll!__RtlUserThreadStart+0x23 (FPO: [Non-Fpo])
01c3ffec 00000000 3304a4ec 00edbeb8 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])

kd> du 0020ed9c
0020ed9c "SELECT * FROM __InstanceCreation"
0020eddc "Event WITHIN 1 WHERE TargetInsta"
0020ee1c "nce ISA 'Win32_Printer'"

kd> !thread -1 7
THREAD 8a01f670 Cid 100c.1028 Teb: 7ffae000 Win32Thread: ffbede90 RUNNING on processor 0
Impersonation token: 8a59d3e8 (Level Impersonation)
Owning Process 0 Image: <Unknown>
Attached Process 8a016d90 Image: WmiPrvSE.exe
Wait Start TickCount 21220 Ticks: 0
Context Switch Count 1337
UserTime 00:00:01.937
KernelTime 00:00:02.312
Win32 Start Address RPCRT4!ThreadStartRoutine (0x76de4dfe)
Stack Init 8e7fa000 Current 8e7f9b48 Base 8e7fa000 Limit 8e7f7000 Call 0
Priority 9 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
ChildEBP RetAddr Args to Child
014de74c 6ea2cc37 00000006 00000000 00000002 WINSPOOL!EnumPrintersW (FPO: [Non-Fpo])
014de7b8 6ea2cdf3 0130d320 00000000 014de7dc cimwin32!CWin32Printer::DynInstancePrinters+0xda (FPO: [Non-Fpo])
014de7c8 6ed5f3dd 0130d320 00000000 00000111 cimwin32!CWin32Printer::EnumerateInstances+0xf (FPO: [Non-Fpo])
014de7dc 6ed5f82f 0130d320 00000000 7fb9fbe8 framedynos!Provider::CreateInstanceEnum+0x21 (FPO: [Non-Fpo])
014decd0 00070ed5 0130f9b8 00292bc4 00000000 framedynos!CWbemProviderGlue::CreateInstanceEnumAsync+0x1cd (FPO: [Non-Fpo])
014ded10 00070d45 00000000 00288fc8 00000000 wmiprvse!CInterceptor_IWbemSyncProvider::Helper_CreateInstanceEnumAsync+0x159 (FPO: [Non-Fpo])
014ded54 76de31eb 0130f9b8 00292afc 00000000 wmiprvse!CInterceptor_IWbemSyncProvider::CreateInstanceEnumAsync+0xc1 (FPO: [Non-Fpo])
014ded7c 76e5184f 00070cbd 014def88 00000005 RPCRT4!Invoke+0x2a
014df1a8 76e52006 00279b30 002739c8 00264f68 RPCRT4!NdrStubCall2+0x27b
014df1f8 718eb35e 00279b30 00264f68 002739c8 RPCRT4!CStdStubBuffer_Invoke+0xa0 (FPO: [SEH])
014df20c 77319759 0128f354 00264f68 002739c8 FastProx!CBaseStublet::Invoke+0x29 (FPO: [Non-Fpo])
014df254 773196f3 00264f68 00275f78 0026b9a8 ole32!SyncStubInvoke+0x3c (FPO: [Non-Fpo])
014df2a0 77239d67 00264f68 00275e70 0128f354 ole32!StubInvoke+0xb9 (FPO: [Non-Fpo])
014df37c 77239c5c 002739c8 00000000 0128f354 ole32!CCtxComChnl::ContextInvoke+0xfa (FPO: [Non-Fpo])
014df398 773187a4 00264f68 00000001 0128f354 ole32!MTAInvoke+0x1a (FPO: [Non-Fpo])
014df3c8 77319498 d0908070 002739c8 0128f354 ole32!AppInvoke+0xaa (FPO: [Non-Fpo])
014df4a4 77318780 00264f10 00263100 00270f38 ole32!ComInvokeWithLockAndIPID+0x32c (FPO: [Non-Fpo])
014df4f0 76de3420 00270f38 7fdbaa13 00270f38 ole32!ThreadInvoke+0x2fd (FPO: [Non-Fpo])
014df52c 76de32ce 7731984e 00270f38 014df628 RPCRT4!DispatchToStubInCNoAvrf+0x41
014df5a0 76de4a8a 00000000 00000000 00000000 RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0xdf
014df5c4 76de48b8 00270f38 00000000 014df628 RPCRT4!RPC_INTERFACE::DispatchToStub+0x67
014df5f8 76de3e6a 00270f9c 00000000 00000000 RPCRT4!RPC_INTERFACE::DispatchToStubWithObject+0x3e
014df638 76de3d78 00270ec8 014df674 00270ec8 RPCRT4!LRPC_SCALL::DispatchRequest+0x298
014df6a4 76de303a 00270ec8 00272268 0026f920 RPCRT4!LRPC_SCALL::HandleRequest+0x1d2
014df748 76e03617 00000000 014df7c4 76de1627 RPCRT4!LRPC_ADDRESS::ProcessIO+0x214
014df754 76de1627 00252d60 00000013 00000000 RPCRT4!ProcessLrpcComplete+0x20
014df7c4 76de4df0 014df7f0 76de4db7 00252d60 RPCRT4!LOADABLE_TRANSPORT::ProcessIOEvents+0x212
014df7cc 76de4db7 00252d60 00000000 00000000 RPCRT4!ProcessIOEventsWrapper+0xd
014df7f0 76de4e1c 0026f180 014df808 76074911 RPCRT4!BaseCachedThreadRoutine+0x5c
014df7fc 76074911 00270a68 014df848 7766e4b6 RPCRT4!ThreadStartRoutine+0x1e
014df808 7766e4b6 00270a68 762680c4 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
014df848 7766e489 76de4dfe 00270a68 ffffffff ntdll!__RtlUserThreadStart+0x23 (FPO: [Non-Fpo])
014df860 00000000 76de4dfe 00270a68 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])

kd> !thread -1 7
THREAD 898766e0 Cid 06d4.0c88 Teb: 7ffae000 Win32Thread: 00000000 RUNNING on processor 0
Impersonation token: 8a4c0950 (Level Impersonation)
Owning Process 0 Image: <Unknown>
Attached Process 89a88b68 Image: spoolsv.exe
Wait Start TickCount 17727 Ticks: 0
Context Switch Count 7
UserTime 00:00:00.000
KernelTime 00:00:00.000
Win32 Start Address RPCRT4!ThreadStartRoutine (0x76de4dfe)
Stack Init 9e5e0000 Current 9e5df7e8 Base 9e5e0000 Limit 9e5dd000 Call 0
Priority 8 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
ChildEBP RetAddr Args to Child
028cef60 71fc7a1b 0227001c 00000002 00000000 ADVAPI32!ReportEventW+0x2 (FPO: [Non-Fpo])
028cefa0 71f9f2e0 00000002 00000000 c0000004 win32spl!NLOGLibrary::TEventLog::LogEvent+0x4a (FPO: [Non-Fpo])
028cf004 71f93956 00000002 00000c6c 021ce6e0 win32spl!TPrintOpen::RediscoverPrinterConnections+0x104 (FPO: [Non-Fpo])
028cf028 73747bb5 00000006 00000000 00000002 win32spl!TPrintProvider::ppEnumPrinters+0x29 (FPO: [Non-Fpo])
028cf074 00d4339d 00000006 00000000 00000002 SPOOLSS!EnumPrintersW+0xb4 (FPO: [Non-Fpo])
028cf0a8 00d43320 00000006 00000000 00000002 spoolsv!YEnumPrinters+0xd4 (FPO: [Non-Fpo])
028cf0d0 76de31eb 00000006 00000000 00000002 spoolsv!RpcEnumPrinters+0x21 (FPO: [Non-Fpo])
028cf100 76e5184f 00d432ff 028cf308 00000007 RPCRT4!Invoke+0x2a
028cf52c 76e4edb5 00000000 00000000 00104b00 RPCRT4!NdrStubCall2+0x27b
028cf548 76de3420 00104b00 65dc820e 00104b00 RPCRT4!NdrServerCall2+0x1e
028cf584 76de32ce 76e4ed97 00104b00 028cf628 RPCRT4!DispatchToStubInCNoAvrf+0x41
028cf5f8 76dd20dd 00000000 00000000 00000000 RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0xdf
028cf638 76de3d78 00104a90 028cf674 00104a90 RPCRT4!LRPC_SCALL::DispatchRequest+0xa2
028cf6a4 76de303a 00104a90 000f9f48 00104bd8 RPCRT4!LRPC_SCALL::HandleRequest+0x1d2
028cf748 76e03617 00000000 028cf7c4 76de1627 RPCRT4!LRPC_ADDRESS::ProcessIO+0x214
028cf754 76de1627 00081528 00000013 00000000 RPCRT4!ProcessLrpcComplete+0x20
028cf7c4 76de4df0 028cf7f4 76de4db7 00081528 RPCRT4!LOADABLE_TRANSPORT::ProcessIOEvents+0x212
028cf7cc 76de4db7 00081528 00000000 00000000 RPCRT4!ProcessIOEventsWrapper+0xd
028cf7f4 76de4e1c 000f1540 028cf80c 76074911 RPCRT4!BaseCachedThreadRoutine+0x5c
028cf800 76074911 000ff818 028cf84c 7766e4b6 RPCRT4!ThreadStartRoutine+0x1e
028cf80c 7766e4b6 000ff818 75e327ee 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
028cf84c 7766e489 76de4dfe 000ff818 ffffffff ntdll!__RtlUserThreadStart+0x23 (FPO: [Non-Fpo])
028cf864 00000000 76de4dfe 000ff818 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])

kd> !token -n 8a4c0950
_TOKEN 8a4c0950
TS Session ID: 0
User: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)
Groups:
00 S-1-16-16384 Unrecognized SID
Attributes - GroupIntegrity GroupIntegrityEnabled
01 S-1-1-0 (Well Known Group: localhost\Everyone)
Attributes - Mandatory Default Enabled
02 S-1-5-32-545 (Alias: BUILTIN\Users)
Attributes - Mandatory Default Enabled
03 S-1-5-6 (Well Known Group: NT AUTHORITY\SERVICE)
Attributes - Mandatory Default Enabled
04 S-1-5-11 (Well Known Group: NT AUTHORITY\Authenticated Users)
Attributes - Mandatory Default Enabled
05 S-1-5-15 (Well Known Group: NT AUTHORITY\This Organization)
Attributes - Mandatory Default Enabled
06 S-1-5-80-2402865663-3129190671-725286074-1860017563-2838182404 (no name mapped)
Attributes - Default Enabled Owner
07 S-1-5-5-0-112781 (no name mapped)
Attributes - Mandatory Default Enabled Owner LogonId
08 S-1-2-0 (Well Known Group: localhost\LOCAL)
Attributes - Mandatory Default Enabled
09 S-1-5-32-544 (Alias: BUILTIN\Administrators)
Attributes - Default Enabled Owner
Primary Group: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM)
Privs:
03 0x000000003 SeAssignPrimaryTokenPrivilege Attributes - Enabled
04 0x000000004 SeLockMemoryPrivilege Attributes - Enabled Default
05 0x000000005 SeIncreaseQuotaPrivilege Attributes - Enabled
07 0x000000007 SeTcbPrivilege Attributes - Enabled Default
08 0x000000008 SeSecurityPrivilege Attributes - Enabled
09 0x000000009 SeTakeOwnershipPrivilege Attributes - Enabled
10 0x00000000a SeLoadDriverPrivilege Attributes - Enabled
11 0x00000000b SeSystemProfilePrivilege Attributes - Enabled Default
12 0x00000000c SeSystemtimePrivilege Attributes - Enabled
13 0x00000000d SeProfileSingleProcessPrivilege Attributes - Enabled Default
14 0x00000000e SeIncreaseBasePriorityPrivilege Attributes - Enabled Default
15 0x00000000f SeCreatePagefilePrivilege Attributes - Enabled Default
16 0x000000010 SeCreatePermanentPrivilege Attributes - Enabled Default
17 0x000000011 SeBackupPrivilege Attributes - Enabled
18 0x000000012 SeRestorePrivilege Attributes - Enabled
19 0x000000013 SeShutdownPrivilege Attributes - Enabled
20 0x000000014 SeDebugPrivilege Attributes - Enabled Default
21 0x000000015 SeAuditPrivilege Attributes - Enabled Default
22 0x000000016 SeSystemEnvironmentPrivilege Attributes - Enabled
23 0x000000017 SeChangeNotifyPrivilege Attributes - Enabled Default
25 0x000000019 SeUndockPrivilege Attributes - Enabled
28 0x00000001c SeManageVolumePrivilege Attributes - Enabled
29 0x00000001d SeImpersonatePrivilege Attributes - Enabled Default
30 0x00000001e SeCreateGlobalPrivilege Attributes - Enabled Default
33 0x000000021 SeIncreaseWorkingSetPrivilege Attributes - Enabled Default
34 0x000000022 SeTimeZonePrivilege Attributes - Enabled Default
35 0x000000023 SeCreateSymbolicLinkPrivilege Attributes - Enabled Default
Authentication ID: (0,3e7)
Impersonation Level: Impersonation
TokenType: Impersonation
Source: Advapi TokenFlags: 0x0
Token ID: 37c91 ParentToken ID: 0
Modified ID: (0, 36e28)
RestrictedSidCount: 0 RestrictedSids: 00000000
OriginatingLogonSession: 3e7

kd> dc 028cef60
028cef60 00000014 71fc7a1b 0227001c 00000002 .....z.q..'.....
028cef70 00000000 c0000004 00000000 00000001 ................
028cef80 00000000 028cef94 00000000 00000000 ................
028cef90 80070002 025b00b0 00000000 00000000 ......[.........
028cefa0 028cf004 71f9f2e0 00000002 00000000 .......q........
028cefb0 c0000004 025b00b0 00000000 00000000 ......[.........
028cefc0 00000000 025c24c8 00000000 72e77820 .....$\..... x.r
028cefd0 72ef33d8 72e7bb7c 00000006 021bb318 .3.r|..r........
kd> dd 028cef94 L1
028cef94 025b00b0
kd> du 025b00b0
025b00b0 "S-1-5-18\Printers\Connections"

Global Escalation Manager Tokyo
-fb

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (13) | Views (2729) |

posted by Simon Crosby

Over the holiday weekend I had one of those "come to X" moments, where for X you may insert your deity of choice. Under my customary backlog of tasks to complete, and wanting to also spend time with my family, I was happily at work on Friday night fine tuning powerpoint for a presentation to the industry, when....

(You've all experienced this before) One profile change too many, one cookie too many, one slide too many, one keystroke too many.. or something, and my XP VM decided to toss its legs, feet & boots in the air. With daylight fading fast, spousal impatience on the rise and with a rapidly (Decibels are measured on a log scale) increasing din on the part of my children, I did something that no self respecting hypervisor zealot would do, namely take a leap of faith in another layer of virtualization - App Virtualization.

And the result is that it saved my weekend with my family, and the current state of my work, and enabled me to meet some tough deadlines this week. Here's what I did: First, the diagnosis was that my Windows XP client OS VM (on my Mac) was done for. I could still boot it. Not much else, and not for long. My key concern was how to rescue all of my files and other state in the VM.

This exercise allowed me to validate a theory that I have had in the area of virtualization, which I can now summarize: Lesson 1: Make your VMs stateless. Move all of your documents (more generally, any app specific storage/state) out of the virtual hard disk of the VM and into an appropriate storage layer external to the virtual hard drive of the VM. In my case, all state (every document I work on) is stored in the local file system of my Mac and is continually backed up to the cloud. So my XP VM was simply an operating context for some apps, divorced from the storage for the docs etc that I work on. The fact that my XP VM had become unstable was therefore not a threat to any of my documents/presentations - only to the execution of the apps. Nothing I value was stored in the virtual hard disk of the VM itself.

Now, fancying a challenge, I also chose to upgrade to Win7 in the process of fixing this problem. After all, why not test Win7 in the process? So I created a new Win7 VM (using the MSDN media). That took the expected amount of time, and I easily got to the point where I had a new Win7 OS booted, with access to all my storage, including all my documents. What next? Well, I needed my Apps. Not only the basics, but also Citrix specific apps - for example expense reporting...

I was tempted to send an email to my local Citrix colleagues requesting install media for all my apps. Then I realized that that would not be easy - since I had no email client! : All I needed to do (and did, after a glass of wine) was download Citrix Receiver, turn on "auto update", and enable the appropriate folder sharing to get my content back into the OS. Then I enjoyed the remainder of the weekend with my family.

When I started work this morning, XenApp App Streaming had delivered to me all the apps that I needed, ready to run at full performance, and appropriately configured for the enterprise network and other infrastructure. I had a brand new Win7 desktop, the latest apps, and everything I had ever created, all beautifully merged into a single runtime system.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1371) |

posted by Lawrence Sharo

A new version of the white theme for web interface has been published.
the article ID is ctx119509.
While I was updating this article I found a few things I thought I would share.
Someone in a different forum was trying to find the style sheet by searching for *.css. This sounds reasonable, in fact I did the same thing. The style sheets are aggregated together by an aspx page named styles.aspx.
The files themselves are actually includes and have the extension inc.
The best way to find them is to search for the word style.
There is a navStyle, fullStyle, etc.

Remember each of these style sheets is aggregated together. The Style closest to the element in question will supersede any previously specified styles.
I hope this info helps you customize web interface to look the way you want.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1109) |


I joined Citrix in 2002 as a developer when we were still a single product company (MetaFrame) of about 1,800 employees and revenues of appx $500m. Since then, we've had magnificient growth in nearly every possible metric - revenues, employees, customers, market share and strategic importance to IT. Working behind the scenes to make it all happen are XenApp's 18 different Technology Component teams working around the clock in 5 different countries to develop 450 product binaries and rigorously test 320 build layouts throughout the project cycle. With this enormity and explosive growth, the question of "How do we deliver products that bring the most value to IT at the lowest cost in the shortest time?" is one that our engineering teams deal with in every product release cycle.

In the last 10 months, being on the Release Team for XenApp, I learned 10 valuable lessons in software engineering management (in addition to losing weight, sleep and some hair ). Although these observations may be based on Citrix-specific examples, I believe that in here are universal truths that apply not just to software development at Citrix but any large IT or software project. Secondly, I want you to get an insight into what some of our engineering processes are like.

Lesson 1: Tackle cross-team dependencies first

XenApp Platinum Edition has many components with numerous cross-team dependencies. If you are a team that owns an SDK (even a couple of APIs or modules for another team to consume), focus on those first before worrying about your internal milestones. You ask why? There are two reasons. First, the team that consumes your interfaces might in turn have other important milestones that depend on this SDK being delivered on time. You can't starve them. Second, most problems arise from these touch points. Eg: RPC calls, 32-bit consumers vs 64-bit SDK, logistics of releasing an SDK are not trivial - build, install issues are often unaccounted for and/or overlooked. That is why it is important to at least provide a skeletal interface (that returns dummy data) and fill in the meat later. Remember - it is better to be somewhat correct than precisely wrong.

Lesson 2: Refactor gradually, not all at once
Our natural tendency as engineers is to try and build the best performing, ideally architected, and most logically modular components. Realistically, it is impossible to score on all these fronts unless you have infinite time. Software engineers are builders and architects. They are extremely passionate about their buildings (code). We often come up with grandiose ideas of re-writing entire components with the latest available technology to try and make it all better and new, this time. But it just doesn't work like that. Here are the pitfalls in "grand" refactoring -

•Grand refactoring comes at a huge upfront cost that we tend to ignore (most of this is in reverse-engineering legacy code). These costs are hard to justify to managers in a tough economy like this, especially when everything is working as is.

• There is no guarantee that refactored code will perform better. The original engineer who wrote that code made certain design decisions consciously (might have been subtle compromises). Statistically speaking, the new engineers who are doing the refactoring are no smarter than the original authors of the code. So don't touch something if it is not completely broken.

• By the time you are half-way into refactoring, it is quite likely that a new set of requirements may come in that contradict your refactoring plan.

I am not against refactoring. Here's what I think is the best approach to refactoring:
• Identify the top problematic areas (in key measures such as maintainability, performance and security) and start by going after those first.

• Learn from smaller refactoring undertakings before you take a big step (think big but start small).

• Advertise refactoring improvements. If a modest investment got you a big gain, blog about it, share your experiences so others can learn from it.

• Refactoring must be continuous (in my opinion, every release should layout 5-7% of $$$ for refactoring improvements) but don't overdo it.

Lesson 3: Don't overestimate demos
Demos are a great way to reveal earned value. It helps to showcase engineering innovation, secure (or maintain) funding and most importantly give confidence in your design. But demo's that show PoC's (proof of concepts) should not be mistaken for end-products. We take several short-cuts when doing demos. There is a long way between demo/prototype quality and release quality that you need to account for in your project plan.

Lesson 4: Don't underestimate integrations
When an novice engineer says "Oh its easy, will take 10 minutes to do", they are almost always wrong. This is especially true of system integration. The convenience of having a VBL (Virtual Build Lab, a sort of private tree for building code) for isolated and disruptive development does not come for free (unless you are isolated by binary based releases, even there you may have a cost arising from dependency alignment). Integrations don't end when your code compiles. It all needs to work (in Citrix, we use a product-wide test automation framework that runs on every build to ascertain quality metrics on a continuous basis). Assign a generous amount of time to do integrations.

Lesson 5: Automation is not a silver bullet
There is a sign in the first floor's break room in our main XenApp engineering building here in Ft. Lauderdale that says "Automation is not a silver bullet". Keep a copy of it in your office. Certain code lends itself well to automation and certain classes of code do not. Like refactoring, here are some thoughts I have on automation:

• Full-fledged automation comes at a huge fixed cost. If your payback period is more than 3 years, re-think. We are in a fast-paced industry. The scenario or code that you automate now, may be far less important (or not even applicable) 2-3 years from now.

• There is code that can be tested very effectively using automation (eg: session management, capacity and load management), and some that just can't be (multimedia). 100% automation is impractical (trying to achieve 100% of anything is somewhat impractical for that matter).

• Automation also needs continuous maintenance. For example, if you author automated unit tests, you need to make sure a. they keep running release after release and b. they keep passing release after release. As code changes, the way it is tested may also need to change. So while calculating payback, be sure to attach a maintenance cost for every test you author.

• Like refactoring, I believe automation effort is one of those things that you have to include for each release, but not overdo it. Start with automating the biggest bang for the buck.

Lesson 6: Keep processes lightweight, yet efficient
As part of the Release Team, I have an obligation to make sure that release processes facilitate and not burden Technology Component (TC) teams. Citrix's processes have evolved greatly since we started. When Citrix had less than 10 engineers in the late 80s, they used to keep track of bugs on a single common whiteboard! Simple yet effective. 20 years later, we have sophisticated bug tracking and requirements management systems. But yet we still strive for the same simplicity and effectiveness that we had 20 years ago. To that effect, we introduced a number of process improvements:

• Formal requirements authoring processes take backstage, instead lightweight feature specs with visuals, screenshots and video demos take center-stage. We need to document things that need to be communicated, not every possible thing one can ask.

• Formalized Graphical Test Plans only where it makes sense (for complete end-end features, not for individual components or modules).

• For features submissions that are surgical changes, you don't need to produce a full code coverage report (cost doesn't always justify the benefit). But make sure you methodically and carefully step-through code changes with various inputs.

• Test automation only where ROI can be justified.

• No more separate low level and high level design documents. They can be combined into one that is readable by both technical and non-technical audiences. 

Lesson 7: Cross-team hand-off is more than just being code-complete
With a process methodology that is component-centric, we "deliver" frameworks, "release" SDKs or "hand-off" API sets. I get really upset when a team makes tall claims to have done one of these things without having a single consumer try it out first. How do you know that your hand-off meets the requirements of the SDK consumer? Does it even work? Did you factor in the time that it takes to write an installer and release a build, tasks that go hand-in-hand with releasing something? I really think Hand-offs must be signed not by the team that releases it, but by the team that actually consumes it.

Lesson 8: Component complexity is multiplicative, not additive
The amount of cross-team dependencies that we have in our product is amazing. This is no different from any other mature product of our size. Don't underestimate this when taking on a new project. If 20 TC teams each take on a project with a complexity of n, the overall complexity of the release becomes n^20, not 20n. This is due to the high cost of integration and integration testing. Keep this in mind before you take on a new feature. Often, less is more.

Lesson 9: What quality means...
The definition of quality has changed in the least 2 decades. The 80s and 90s were about trying to achieve high quality control. If there was no Six Sigma or SEI certification, you were considered an outcast. Things have changed since then. In the age of well-designed products like the iPhone, Windows 7, Google maps, Amazon and Salesforce, strong visual appeal, good design and usability are now taking center-stage. This has been true for Citrix as well. In the last few years, our focus has been shifting from a blind, knee-jerk, single-dimension view on "bug counts" to taking a more practical approach of solving real customer pain-points (for example: XA5 for Win2003 IMA resiliency, VM Hosted Apps, etc) and making some smart investments in design and intuitive visual appeal (Dazzle, Receiver, etc). Also, we've been constantly keeping maintenance costs low and passing on the cost benefits to our customers, by shedding expensive baggage (high cost, niche legacy feature deprecation and removal of code that is no longer executed). Keep looking for these opportunities at the code level.

Lesson 10: Balance Idealism and practicality
This is really the biggest lesson that I've learned. You can't achieve your ideal vision in one release. Be practical and be patient. Go after hard and known technical problems one at a time. Build on small successes to springboard you to the next level. Enterprise products and quality are built like concentric circles, inside - out. Create and follow a roadmap to your ultimate vision.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1299) |

posted by Vinny Sosa

XenApp Expert Series - Informational, News, Interviews (2009) The show where we interview the experts to get you the latest research and technology news on XenApp application virtualization. Host Vinny Sosa (@vinnysosa) interviews Citrix Architect Joe Nord on application streaming and enhancements coming in XenApp 5 Feature Pack 2. Episode 7, Season 1.


Listen to this episode

Follow XenApp on | | |

Download XenApp technology previews

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1441) |

posted by Daniel Feller

As we now have the desktp virtualization design discussion going, I want to look at the next big question... Should I do XenApp or XenDesktop? Can I get by with Terminal Services or do I need VDI? Spend just a little time going through tweets, blogs and articles related to desktop virtualization and you will be left in the same place you started, asking the simple question "Should I do this or am I crazy?"  When I think about the desktop (I really need to have a better imagination) it isn't focused on what solution to pick, or which vendor to pick... It is focused on one simple concept:

Delivering the Correct Application to the Correct User in the Best Manner Possible

  • What is the correct application? The one the user wants
  • Who is the correct user? The one making the request
  • How should it be delivered?  That is the tricky question isn't it.  This is where we all struggle to make headway, we keep stalling because we just aren't sure.  Why is the decision so difficult? Because users are very demanding. User keep the organization functioning.  If you hurt the user, you hurt the organization, which means you will hurt yourself (bye bye promotion, raise, or job).  

So how do you make the right decision? By realizing three simple truths:

  1. One size does NOT fit all
  2. Applications are unique
  3. User's requirements change

Trying to align the users, applications and devices into a single, coherent desktop virtualization solution seems like a daunting task, but if you follow a few guidelines the process is doable.  For example, if a user comes to work with their own personal laptop, can I simply deliver them a hosted virtual desktop or will they need a local virtual desktop? What about users with a 3-4 year old PC?  What can I do with that setup? 

This is why I suggest you take a look at the following, recently published, white paper focusing on the deciding factors between VDI and Terminal Services-based solution. If you want a highlight of the article, it is that the whole debate is not even a debate at all. 

What do you think? 

Daniel - Lead Architect - Worldwide Consulting Solutions

Follow me on Twitter: http://www.twitter.com/djfeller

Follow me in the Blogs: http://community.citrix.com/blogs/citrite/danielf
  

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (661) |

posted by Futoshi Baba

Motivation
ICA winstation driver(wdica!KeyboardScanCodes()) always passes the following keyboard input data structure down to termdd!IcaChannelInput() in Shadow_Stack a.k.a passthru stack when user finished Shadow by entering Hotkey "Ctrl + " and remained that key in the previous shadower session. This means to cause SAS dialog by only "Alt" key down.

Debugging and some comments


PROCESS 820d5bc8 SessionId: 0 Cid: 09cc Peb: 7ffdf000 ParentCid: 01f4
DirBase: 0fdee3e0 ObjectTable: e1487130 HandleCount: 413.
Image: svchost.exe

scancode member for keyboard make in KeyboardInputData structure
~ snips ~
MakeCode : 0x1d
Flags : 0
~ snips


This scancode deliver causes to remain win32k!gfsSASModifieresDown(2) in previous shadower session.This is perfomed at win32k!xxxKeyEvent() to remains Ctrl / Shift / Alt key are really phisically down. At this moment, win32k!gfsSASModifieresDown(2) and win32k!gfsSASModifiers(3) by default.

In a mean time, user enteted "Alt" key in previous shadower session then add modifier ALT(1) to win32k!gfsSASModifieresDown(2) win32k!gfsSASModifieresDown became 3 which is SAS modifier Hotkey. then SAS dialog popped up in the previous shadower session as a result of entering "Del" key in win32k!IsSAS().

On the other hand, RDP winstation driver passes keyboard input data structure down to termdd!IcaChannelInput() in Shadow Stack as the same as ICA passthru stack. However, modify Flags member in keyboard data structure to 0x10. This implementation prevented from the same issue so that remains win32k!gfsSASModifieresDown(2) in previous shadower session.

useful conditional break point
The following conditional break patching was effective in this ica shadowing scenario.
0 e f768a096 0001 (0001) termdd!IcaChannelInput "j poi(@esp+8) = 0 & poi(poi(esp+14)+2) = 0x1d'!process -1 0;kv;ew poi(esp+14)+4 0x10;gc';'gc'"

Global Escalation Manager Tokyo
-fb

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (11) | Views (3299) |


Windows Server 2003 is dominant today in Citrix XenApp environments. In fact we are currently at the peak (or nearly so) for a W2k3 installed base for Windows servers in general. As our customers look forward they will be faced with some potentially thorny issues when moving to Windows Server 2008. The main question is whether to go to the first W2k8 release (I will call it "R1" for the sake of simplicity) which includes both 32-bit and 64-bit versions or to skip R1 entirely and go with the recently released R2 which only supports 64-bit.

Based on several discussions we have had with partners and customers there seems to be a continuum of opinions. On the one extreme we hear folks saying that they will stick with 32-bit until it is ripped away from their cold, dead hands. These are among the more conservative who fear the expense and churn of having to validate all of their thousands of 32-bit applications on a 64-bit environment. They have told us they will stay on W2k3 until extended support is complete and then probably go to R1 and milk that for all it's worth to avoid the inevitable. That would mean sticking with a 32-bit OS until possibly 2018 (should we all be retired by then?) going by the Microsoft Lifecycle table for Windows Server 2008! On the other extreme are a few bleeding edge types who have decided to skip R1 and go directly to R2 and bite the 64-bit bullet at the same time as they migrate their environment from W2k3 to the newer OS. In between are those who will move cautiously if begrudgingly over time to the new OS version to avoid falling into the extended maintenance window.

One of the main concerns is, of course, that R2 is 64-bit only. While Microsoft has been stating for some time that Windows on Windows 64 (WoW64) will solve the problems associated with running 32-bit apps on x64 platforms, many customers are still worried about 32-bit apps with 16-bit installers and the ever-present 32-bit drivers. Not to mention, 16-bit apps. None of these will not work on WoW64 environments. On the other hand, don't customers have to test all their apps when transitioning from one OS platform (W2k3) to another (R1 or R2) anyway? What extra work is involved when validating apps on x64 versus just transitioning from one version of the OS to another? Of course out lives would be easier if everyone hopped to the new OS version ASAP so we did not have multiple platforms to support but the reality is quite different. We need to know what your thoughts and plans are on this one.

So this brings me to my questions for the community:

  • What do you have to say as customers and partners?
  • Will you stick to 32-bit as long as humanly possible?
  • Do you have older apps with 16-bit installers or 16-bit apps? What is the plan there? Re-write or retire?
  • What will you do about 32-bit drivers? Printer drivers? Will XenApp's Universal Print Driver solution be the answer?
  • What has been the experience for those who have made the switch to 64-bit?

Give us your comments and take the poll below.

For future updates, follow me on Twitter.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (7) | Views (2535) |

posted by Angela Guzman

If you currently hold a Citrix Certified Enterprise Administrator (CCEA) or Citrix Certified Integration Architect (CCIA) certification, did you know that update paths are available for both the upcoming CCEE (Citrix Certified Enterprise Engineer) and CCIA for Virtualization? These update paths give seasoned Citrix pros the opportunity to update their credentials without taking five or six exams. The idea behind these update paths is to test candidates on new required skills, not on skills they already possess through previous certification.

To find out more and how you can prepare, go to www.citrix.com/CCEEupdate or www.citrix.com/CCIAupdate

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (4) | Views (3606) |

posted by Chris Fleck

The recent announcement of the Terremark Cloud offering has raised significant attention especially because of the competitive pricing and EC2 like features of elastic capacity and hourly charges with no commitment. On the surface the Terremark entry price of $0.036 per hour seems very low compared to Amazon EC2 at $0.10 but it's worth picking a few examples to provide a more apples to apples comparison.

..
Not included in the comparison is the difference in storage costs which can be small or very significant depending on the circumstance. Amazon provides up to 160 GB of instance storage for a small image or 850 GB for a large included in the hourly cost. If you have only a small instance say 10GB that adds $ 2.50 to the monthly price at Terremark ( @ .25/GB ) however of you needed the 850 GB included in the Amazon Large image that would add $ 212 to the monthly Terremark costs. Also not included is bandwidth costs, however both charge the same $0.17 GB for data transfer out . ( Although Amazon charges $ 0.10/GB for data in vs Terremark $ 0.17 data in ).

Some the bigger differences will more likely depend on how the VMs are utilized. The numbers stated above assume a full month of 24x31 operation. With Amazon EC2 it's possible to save in S3 ( bundle in Amazon terms ) an instance and then shut down ( terminate ) the VM and the billing stops. With Terremark however although you can shut down the VM, the hourly charges do not stop. Only deleting the VM ends the billing, there does not appear to be an option of saving with the hourly charges turned off and allowing a new instance from the saved image to be started at a later time. This appears to be a big advantage for Amazon although I need to learn more about the Terremark offering to fully appreciate the capabilities.

Certainly economics is not the only factor in selecting a Cloud infrastructure provider. Vendor Lock-in and VM portablity often come up as concerns. Security is also a factor in regard to Cloud computing and this was a motivator for Amazons recent Virtual Private Cloud offering which provides a dedicated VPN connection from a customer premise to an isolated Cloud inside the Amazon infrastructure. I also have to admit I was impressed with a recent tour of the Terremark data center in Miami , this place was like a high tech Fort Knox when it came to security. The entire topic of Cloud security is worthy of specialized consideration not covered in this simple comparison.

Ease of use is another consideration that is worth evaluating. The Amazon Web Console is limited in function but easy to use plus includes access to many partner and community provided ( including Citrix C3 Lab ) templates that are prebuilt and ready to launch. In Amazon EC2 for example its now possible signup and launch your own XenApp server in as little a 15 minutes.

Terremark also provides a web base console that looks straight forward however I have not used it myself yet. Terramark does not provide the same portfolio of 3rd party templates however they do provide more granularity in the size of VMs and RAM plus they offer multiple versions of Windows Server.

As the options for Cloud Computing continue to expand the economic analysis of Cloud vs Premise will extend to Cloud vs Cloud, as Service Providers continue to provide dynamic cloud type offerings.

Cloud Economics 101 Part 1 - Premise vs Cloud vs Colo
Cloud Economics 101 Part 2 - Premise Plus Cloud
Cloud Economics 101 Part 3 - Amazon Reserved Pricing

http://twitter.com/chrisfleck

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1275) |

posted by Rich Crusco

Get ready for another European Geek Out event at this year's CUGtech event being hosted by Citrix Users Group Norway on Oct 7 through Oct 9 at the Dr. Holms Hotel in Geilo, Norway

This will be HARDCORE technical stuff with some of the best geeks in the world!
Shawn Bass and Benny Tritsch are coming! So are Alex Yushchenko, the founder and master of PubForum! We also have our danish friend Rene Vester from DKCUG on the speakers list! From Citrix we will have speakers from Citrix Support and Citrix Consulting, and from US our dear friends Rich Crusco and Rick Dehlinger are coming.

If you don't know about Citrix Users Group Norway, climb out from under that rock you have been living under, and come and join us at one of Europe's premier independently run Citrix Users Group events.

Click below to learn more:

CUGtech Autumn 2009: http://cug.no/cugtech-autumn-2009/
Location: http://cug.no/cugtech-autumn-2009/location/
Transport: http://cug.no/cugtech-autumn-2009/transport/
Speakers: http://cug.no/cugtech-autumn-2009/speakers/
Agenda: http://cug.no/cugtech-autumn-2009/agenda/
Master Classes: http://cug.no/cugtech-autumn-2009/master-classes/
Register: http://cug.no/cugtech-autumn-2009/register/

Stay tuned for more announcements about when registration will be made avaialble

Expand Blog Post

<< Prev   1     2     3     4     5   6   7     8     9     10     11   Next >>