Monthly Archives: April 2011 - Page 3

RemoteFX RLGR3 decoding

Microsoft introduced a new remote desktop (RDP) technology called RemoteFX in Windows 7 SP1 and Windows Server 2008 R2 SP1. Remote FX shifts most of the graphics processing to server from client. As such, thin clients can display 3D images and stunning visual details that were not possible before. Since most of the graphics processing takes place on server side, there are some requirement on the server hardware. For details, please bing “RemoteFX”. For brevity, I’ll use RFX for RemoteFX in the rest of this document.

To achieve the graphics performance offered by RFX, a new codec is introduced for RDP. The official specification for this codec is named “Remote Desktop Protocol: RemoteFX Codec Extension” and will be mentioned as [MS-RDPRFX] in the rest of this blog.

RFX codec uses modified version of Adaptive Run-Length Golomb-Rice (ARLGR) encoding to perform lossless compression on graphic data that is sent to a client. Although RLGR encoding compresses data losslessly, RFX codec performs a lossy compression on graphic data. The lossy part of compression is performed at quantization stage. The details of encoding and decoding are documented in [MS-RDPRFX]. This blogs focuses on RLGR decoding and intends to provide test data for developers implementing RLGR decoding on the client side.

TS_RFX_TILESSET message contains number of tiles. Each tile contains RLGR encoded data for Y, Cb and Cr channels. The first step is to RLGR decode the three channels which results in three vectors of 4096 (64×64) elements each. We will decode only Y channel in this blog. Decoding for Cb and Cr is exactly the same. We will start from the data for Y channel as received in a tile of TS_RFX_TILESET message and will perform the RLGR3 decoding. After the decoding as described in this document, data is ready for “Sub-band Reconstruction” as described in section 3.1.8.2 of [MS-RDPRFX].

I have assumed that the reader of this blog has read and somewhat understood section 2 and 3 of [ARLGR]. Please keep a copy handy while reading this blog. This blog’s mission is to explain the algorithm presented in section 3.1.8.1.7.3.1 of MS-RDPRFX and I’ll use the terminology presented there without explaining it. So, it will definitely help to keep a browser window open pointed to [MS-RDPRFX].

Here is the data for Y channel as received in one of the tiles of TS_RFX_TILESET message from an actual Windows 7 SP1 virtual machine running under hypervisor on Windows 2008 R2 SP1 server:

0×06, 0×20, 0xda, 0×17, 0×42, 0xe8, 0xfa, 0×00, 0x1f, 0xfc, 0×80, 0×64, 0×06, 0×40, 0xc8, 0×32,

0x0c, 0×86, 0×46, 0x4c, 0×99, 0×67, 0xc5, 0xf8, 0xba, 0x5d, 0x2e, 0×96, 0x4b, 0×45, 0×00, 0×00,

0×01, 0xba, 0×44, 0×03, 0×30, 0xe8, 0×80, 0xcc, 0xe8, 0×83, 0×97, 0×80, 0×39, 0×88, 0×02, 0×01,

0×01, 0×04, 0×10, 0x8f, 0x2f, 0×29, 0x1f, 0xff, 0xff, 0xff, 0x9f, 0×73, 0xee, 0x7d, 0xcf, 0xb9,

0xf7, 0x3e, 0×17, 0×80, 0×00, 0×02, 0×00, 0×03, 0×67, 0x8c, 0x7a, 0xa7, 0x0a, 0×91, 0xc0, 0×70,

0x1c, 0x1c, 0×38, 0xe2, 0xff, 0xfc, 0x0f, 0xec, 0xdf, 0×33, 0x7c, 0x4d, 0×89, 0×00, 0×00, 0x2f,

0×07, 0×86, 0×10, 0×96, 0×90, 0x8b, 0xcf, 0xf2, 0x8f, 0xa1, 0×64, 0xb8, 0xc7, 0×81, 0×00, 0x8c,

0×30, 0×03, 0×10, 0×00

 

The size of this block is 116 bytes. The data is always a multiple of 4 bytes or in other words contains complete 32 bit blocks. This is due to the fact that at the time of encoding, data is padded with zeros to make output a multiple of 32 bits. This has some implication at the time of decoding as we will see later.

After RLGR3 decoding, the output vector has 4096 elements. Most of the elements are zero, so I am reproducing here the elements that are not zero. Please note that index starts from 0. These elements are called coefficients in {MS-RDPRFX] and I’ll use that for these elements for the remainder of this blog.

 

[0024]=  3

 [0056]=  3

 [0088]=  3

 [0120]=  3

 [0152]=  3

 [1152]= -3

[1153]= -3

 [1154]= -3

 [1155]= -3

 [1156]= -3

 [1157]= -3

 [1158]= -3

[1159]= -3

 [1160]= -3

 [1161]= -3

 [1162]= -3

 [1163]= -3

 [1164]= -3

[1165]= -3

 [1166]= -3

 [1167]= -3

 [1168]= -3

 [1169]= -3

 [1170]= -3

[1171]= -3

 [1172]= -3

 [1173]= -3

 [1174]= -3

 [1175]= -3

 [1176]= -4

[3083]= -1

 [3084]= -6

 [3099]= -1

 [3100]= -6

 [3115]= -1

 [3116]= -5

[3132]=  1

 [3344]=  1

 [3345]=  1

 [3346]=  1

 [3347]=  1

 [3348]=  1

[3349]=  1

 [3350]=  1

 [3351]=  1

 [3352]=  1

 [3353]=  1

 [3354]=  1

[3355]=  1

 [3356]=  1

 [3360]= -8

 [3361]= -8

 [3362]= -8

 [3363]= -8

[3364]= -8

 [3365]= -8

 [3366]= -8

 [3367]= -8

 [3368]= -8

 [3369]= -8

[3370]= -8

 [3371]= -8

 [3372]= -8

 [3373]=  1

 [3628]=  1

 [3846]=-18

[3854]=-11

 [3862]=  2

 [3904]=  4

 [3905]=  4

 [3906]=  4

 [3907]=  4

[3908]=  4

 [3909]=  4

 [3910]=  3

 [3911]= -1

 [3912]=-14

 [3913]=-14

[3914]=-14

 [3915]=-14

 [3916]=-14

 [3917]=-14

 [3918]=-12

 [3919]=  2

[3974]= -1

 [3982]=  4

 [4032]=  6

 [4037]= -1

 [4038]= -8

 [4039]=-59

[4040]= 45

 [4046]= -5

 [4047]=-36

 [4048]= -2

 [4054]=  1

 [4055]=  7

[4056]= -1

 

 

 

 

 

 

The algorithm to encode/decode is a modified form of [ARLGR]. There is one very important difference that is captured in the pseudo code for encoding and decoding algorithm but is not explicitly mentioned in [MS-RDPRFX].

In run mode, the input to GR(u,kr) is signed numbers i.e. no folding and interleaving mapping is performed. On the other hand, the input to “no run” mode is folding and interleaving mapped. Folding and interleaving mapping is defined in [ARLGR].

In the following, I’ll present the steps taken to decode the data I presented earlier in this blog. At the encoding stage, the output of encoding starts from the MSB (most significant bit) of the byte. So, at the time of decoding, we start from the MSB of the first byte in the data. I’ll decode in chunks of 4 bytes at a time and refill from the input data as needed.

The first four bytes are 0×06, 0×20, 0xda, 0×17 which in binary would be 00000110001000001101101000010111.

The initial values for decoding parameters are:

k=1 kp=8 kr=1 krp=8

Since k=1, we are in run mode, we remove first bit from the input which is a zero, the output is two zeros, based on the fact that 2k is 2 so we produce two coefficients each equal to zero (see Table 2 in [ARLGR]).

[0000] = 0, [0001]=0

Next we increment kp=kp+4=12, then we right shift kp, LSGR times (3) to get new value of k, which is 1. We continue in this fashion till we hit the first non-zero bit in the input. Here is the output before we hit the first non-zero bit.

Input now = 0000110001000001101101000010111

Output = two coefficients each equal to zero ([0002]=0, [0003]=0)

k=2 kp=16

Remove one bit

 

Input now = 000110001000001101101000010111

Output = 4 coefficients each equal to zero ([0004]=0, [0005]=0, [0006]=0, [0007]=0)

k=2 kp=20

Remove one bit

 

Input now = 00110001000001101101000010111

Output = 4 coefficients each equal to zero ([0008]=0, [0009]=0, [0010]=0, [0011]=0)

k=3 kp=24

Remove one bit

 

Input now = 0110001000001101101000010111

Output = 8 coefficients each equal to zero ([0012]=0, [0013]=0, [0014]=0, [0015]=0,  [0016]=0, [0017]=0, [0018]=0, [0019]=0)

k=3 kp=28

Remove one bit

 

Input now = 110001000001101101000010111

 

Now we have a non-zero bit and as we are in run mode, this is of the form 1 + bin(m, k) + GR(u, kR) (see [ARLGR], Table 2) which means that the first 1 is to mark partial run, the next three bits (since k=3) tell us how many zeros to output and they are 100 so we output four coefficients of zero each ([0020]=0, [0021]=0, [0022]=0, [0023]=0). So far the number of coefficients produced is 4+8+4+4+2+2=24. The twenty fifth coefficient is encoded with GR(u, kR).  As I explained earlier, this GR is different from what is described in [ARLGR]. The first bit is the sign bit. If it is zero, the coefficient is a positive integer, otherwise negative. Since in this case first bit is 0, the coefficient is positive. The bits that follow represent the GR code of the (magnitude-1) of the coefficient. So the number of 1’s before we hit a zero is equal to u/2kr. Since there is only one 1, u is equal to 1X2 = 2 because kr=1. The next zero in the input is the delimiter 0 to mark the end of 1’s. The next kr bits represent remainder. So the remainder is 0. That means that (magnitude-1) is 2+0=2 and magnitude is +3. This is the 25th coefficient that we produced ([0024=3). The number of bit from input used=4+4=8.

 

Since we decoded a GR(u,kr), we need to decrement kp and adjust krp based on number of 1’s we decoded (p). Since p = 1 (see [ARLGR], Table 3), no change in kr and krp. Kp is reduced by DN_GR (6) and becomes 22 and k=kp>>LSGR =22>>3=2. After removing 8 bits from input:

 

Input now = 0001101101000010111

We will continue in “run mode” in similar fashion. When we produce a series of non-zero coefficients without having zero coefficients in “run mode”, it results in decrement of kp and eventually results in k becoming zero. This happens when coefficients from index 1152 to 1162 are produced. All these coefficients are non-zero (-3) and resulted in k going all the way to zero. This changes the mode of operation from “run mode” to “no run” or GR mode. When we enter GR mode we have the input as

Input now = 1111100010111111000

k=0 kp=4 kr=1 krp=8

So looking at the input, we have five 1’s. So p=5. Since kr=1, u=p*2kr =5*2=10.  The remainder is zero (since next bit is zero and kr=1). We remove 7 bits from the input.

Input now= 010111111000

 

The decoding we are performing here is RLGR3. In RLGR3, GR mode operates a little different. For details please see section 3.1.8.1.7.2 of [MS-RDPRFX].  So, 10 is sum of two coefficients. The first coefficient is represented in the least number of bits needed to represent  the sum (10).

Now log2 10 > 3 so the least number of bits needed to represent next coefficient is 4. The next 4 bits are 0101. That is 5 in decimal. The second coefficient is 10-5=5. These two numbers are folding and interleaving mapped. So the actual coefficients are -2y-1=5 => -2y=6 => y=-3. So, both are equal to -3 ([1163]=-3, [1164]=-3). We remove 4 bits from the input.

Input now = 11111000

The adaption parameters are adjusted differently in GR mode. Kr and krp are adjusted for the sum. K and kp are adjusted based on the two coefficients produced. Since p=5, krp = krp+5= 8+5=13. Kr=krp>>LSGR=13>>3=1. Kp (and subsequently k) is adjusted as per the pseudo code in section 3.1.8.1.7.3.2 of [MS-RDPRFX]. When we entered Gr mode, k=0 and kp=4. The coefficients produced are non-zero so we decrement kp by 2*DQ_GR. 2*DQ_GR is 6 and kp=4-6=-2. But the minimum kp can go zero, so kp=0 and therefore k=0.

So far we have covered all the scenarios of RLGR3 decoding. The only thing left is to discuss a little bit how the end of the input is processed.

Everything is dealt as explained earlier but algorithm stops when all 4096 coefficients are generated. As explained earlier, the data is padded to make number of bits a multiple of 32. So it is not necessary to exhaust all the bits in the input.

——————————-

References

[MS-RDPRFX]: Remote Desktop Protocol: RemoteFX Codec Extension

http://msdn.microsoft.com/en-us/library/ff635423(PROT.10).aspx

 

[ARLGR] Malvar, H.S., “Adaptive Run-Length / Golomb-Rice Encoding of Quantized Generalized Gaussian Sources with Unknown Statistics”, Proceedings of the Data Compression Conference, 2006 (DCC 2006) pp. 23 – 32, March 2006,

http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=01607237

 

 

Tool Helps iPhone Developers Move to Windows Phone

phone7-brandA new “API mapping tool” to help iPhone developers port applications to Windows Phone 7. For current mapping, we started with three popular categories (Network / Internet, User Interface and Data Management) and mapped them to Windows Phone 7 API.

…(read more)

Tool Helps iPhone Developers Move to Windows Phone

phone7-brandA new “API mapping tool” to help iPhone developers port applications to Windows Phone 7. For current mapping, we started with three popular categories (Network / Internet, User Interface and Data Management) and mapped them to Windows Phone 7 API.

…(read more)

Tool Helps iPhone Developers Move to Windows Phone

phone7-brandA new “API mapping tool” to help iPhone developers port applications to Windows Phone 7. For current mapping, we started with three popular categories (Network / Internet, User Interface and Data Management) and mapped them to Windows Phone 7 API.

…(read more)

Social in the Enterprise

“The opportunity is that your organization can be more agile, more innovative, more
efficient than ever before… The challenge is, we have to govern things well.”

Recently I sat down with Christian Finn, Director, SharePoint, Microsoft, to get his thoughts on social media, new devices and collaboration in the enterprise.

Steven Ramirez: Now that social media has come into the enterprise, what does that mean for IT in terms of providing a productive work environment?

Christian Finn: Well, it creates tremendous opportunities to solve problems that were hard or even impossible to solve before. It also creates more challenges in terms of management and adoption.

On the opportunity side, social tools have the capability of revolutionizing how people collaborate inside an organization. If you think about all the different kinds of collaboration technology we’ve had up to now, they’re all really focused on how you bring a workforce together, break down organizational silos, support people across different geographies, and how you let people in one part know what the rest of the organization is doing.

And so there’s tremendous upside there. If you can help your people find out all the different projects going on in an organization, for example, you can cut down on redundant work. Because you’ve probably got someone in Dept. A solving the same problem that someone in Dept. B is struggling with. Social tools give you a capability you haven’t had before for people to surface their work to one another in a very lightweight way, and facilitate that kind of discovery.

Balance that with the fact that social tools really require user participation at a level unheard of in the past. If you roll out an ERP system, your users may like it or they may not like it. You may have a great change management regimen but ultimately they’re going to have to use that system to get their job done. If you roll out communities or social networking, you’re relying on the users to want to use those tools themselves. And you have to approach the rollout in a different way to get more buy-in. These solutions become part of what they do, so their requirements become correspondingly more important than in a typical IT project.

The other issue organizations have to deal with is around the management of appropriate behavior and compliance. If I’m in a highly regulated industry and someone is using a social tool like a blog to express their opinion, that’s something I may need to manage as a record for compliance. And I need to make sure the tools are there to do it. So tremendous upside in opportunity but also a higher level of requirement for really being thoughtful about how you implement and manage the environment.

SR: What effect are devices like slates having on collaboration when it comes to applications?

CF: Well, they’re having a tremendous impact across the enterprise. Executives are bringing these devices into the workplace and asking IT to support them, which is unheard of. This consumerization of IT element is very strong. And it’s not just coming from the youth, it’s coming from the C-suite as well.

SR: And it’s counter to the idea of governance, right?

CF: Yes, and it’s resetting the tradeoff between management and security and empowerment. It’s really focusing on empowerment. I think the deeper effect is that people now have a rich collaboration environment available to them 24×7. They’ll be in a meeting and they’ll be able to get information from their CRM system or from their social network about the customer they’re meeting with in an unobtrusive way. It’s not only going to make people more productive but where you have investments in collaboration and knowledge management across the organization, it’s going to bring those benefits to employees for more of the time that they’re actually working. It’s a tremendously exciting thing.

SR: What are the biggest challenges and opportunities you’re seeing for collaboration in the next 3-5 years? And how should IT address those?

CF: Well, the challenges and opportunities are very closely intertwined. The opportunity is that your organization can be more agile, more innovative, more efficient than ever before. If I’m trying to find somebody’s work product—a presentation on a specific subject—you can use a search engine. And you may or may not find it. And we know employees spend too much time every year looking for things and not enough time finding the right thing. In your case, I know that you present on this topic, and I’ve got a social network so I can quickly find you. Your work product is saved with your profile, so in 2-3 clicks I can say, “Oh, I need this presentation. I know Steven would probably have something like that.”

The challenge is, we have to govern things well. At Microsoft, we don’t let anyone do anything anonymously or under persona. Everything you do is under your name. So if you do something that’s inappropriate, you can. We’ll find it and take it down but everyone will know it was you. That level of governance has kept the misbehavior to zero. But you have to be thoughtful about your governance.

SR: This has been great, Christian. Thank you so much.

 

The opinions and views expressed in this blog are those of the author and do not necessarily state or reflect those of Microsoft.

How to detect if the .NET Framework Platform Update 1 is installed

Humans

Go to Control Panel / Programs / Programs and Features / View Installed Updates

Use the Search Box to search the updates for

SNAGHTML16a27c2

Or if you prefer, search the list your self

Microsoft .NET Framework 4 Platform Update 1 – Runtime Update

  1. Look for .NET Framework 4 Extended
  2. Look for Update for Microsoft .NET Framework 4 Extended (KB2478063)
  3. Click on the Help Link to see what you get with this update

SNAGHTML1612b2b

Microsoft .NET Framework 4 Platform Update 1 – Design-time Package for Visual Studio 2010 SP1 (KB2495593)

  1. Look for Microsoft Visual Studio 2010 (<Your Edition) – (<Language>) (KB2495593)
  2. Click on the Help Link to see what this update contains

Programs

Look in the registry for the following keys

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NET Framework\v4.0.30319\SKUs\

.NETFramework, Version=v4.0.1

.NETFramework, Version-v4.0.1, Profile=Client

SharePoint Diagnostic Studio (SPDiag) has shipped!

SharePoint
Diagnostic Studio (SPDiag) has Shipped
, and along with it SharePoint
Admin Toolkit (SPAT) v2 for SharePoint 2010.

This is a
very exciting day for our on-premise customers managing their own SP
installations.  SPAT brings a crucial set of tools for managing and
pinpointing issues with SharePoint farms.  With the inclusion of SPDiag,
the set of tools have become even more powerful.

New in SharePoint 2010 Administration Toolkit 2.0, the SharePoint Diagnostic Studio 2010 (SPDiag 3.0) provides SharePoint administrators with a unified interface that can be used to gather relevant information from a farm, display the results in a meaningful way, identify performance issues, and share or export the collected data and reports for analysis by Microsoft support personnel.

 

As someone who works on SharePoint performance and reliability by monitoring farms in production, this tool has been the most useful invention to me since sliced bread! You can use its nifty interface to connect to the logging database of a certain farm, see charts of the availability and latency percentiles for that farm, investigate issues such as extra slow pages, catch solutions that have design flaws that degrade performance, all within a friendly UI that will show you both the data from the logging database as well as the ULS logs. I was personally not involved in the creation of this tool, so I can honestly objectively say: it’s brilliant! If there’s any interest, I might post some blog entries about reports I like especially much, or think are useful. Let me know if you’d want to read more about this. 

There’s also a post with a little bit more info on the SharePoint team blog by Bill Baer:

http://sharepoint.microsoft.com/blog/Pages/BlogPost.aspx?pID=971

Automatic Decompression in WCF

WCF services that are hosted in IIS can take advantage of compression without making any special encoder changes. In Windows Server 2008 R2, IIS compression is actually turned on by default and WCF as of .Net 4.0 supports decompression by default. So if you’ve got a WCF web-hosted service on a W2K8R2 server using an HTTP transport, then you don’t have to do anything to take advantage of compression. If your goal is to have compression on your services and you meet those criteria, then you can kick back now and don’t even have to read the rest of this post.

For the rest of us though, there are many interesting details to consider. I figured a question and answer format would work best to explain the nuances.

Q: I’m using Silverlight. How can I take advantage of compression?
A: The good news is that you don’t have to do much. Silverlight itself is not responsible for decompressing the messages from a service. The browser will do that for you. Since all requests are essentially going through the browser, the browser can stick in the Accept-Encoding header in the HTTP message. That signals the web server that the client can handle compressed messages and the web server can then decide to turn compression on or off.

Q: If compression is on by default in W2K8R2, how does that affect performance?
A: With IIS, compression is not just always on or off. IIS can choose to use compression based on a number of parameters. For instance, if the CPU usage on the web server is below a minimum threshold or above a maximum threshold, then compression will be turned off. To keep the response times from being too erratic, IIS only checks every 15 seconds or so (not sure on the exact number). So if you’re running a performance test you might get some weird results. For instance, this is a 20 second test where the compression was on at first and the bottleneck was the CPU, so the network usage was low. Then IIS decided to turn off compression because the CPU usage was above the threshold and that sent the network usage to 100%.

So if you’re running performance tests on your application, you have to be aware of the compression settings. Instructions on how to configure those settings are available here:

??http://www.iis.net/ConfigReference/system.webServer/httpCompression

Q: Does automatic decompression work for anything besides HTTP transports?
A:
No. What automatic decompression essentially does is add the Accept-Encoding header to the header of an HTTP request message. It then recognizes the gzip or deflate Content-Encoding on the response.

Q: Who is actually doing the decompression?
A:
In the case of Silverlight, the browser is performing the decompression. In the case of a WCF client, the decompression happens in the System.Net layer, before the message even reaches WCF.

Q: Can I compress HTTP requests?
A:
No. While it’s normal to put Accept-Encoding in the header for a request, it’s not expected to have Content-Encoding set to gzip or deflate in there. I believe this has more to do with how HTTP was intended to be used. Therefore, when System.Net automatic decompression was implemented, they only provided for decompression of response messages and not request messages. WCF does not do any decompression on its own, so wouldn’t be able to handle it. Although I haven’t verified it, I don’t believe IIS would handle it either.

Q: Do I need to be using .Net 4.0 to get compression?
A:
This depends on your situation. Your web-hosted service does not need to be using .Net 4.0 since IIS is the one doing the compression. For Silverlight, it’s really up to the browser if you can handle compressed messages. For WCF clients, that is the case where you’d need .Net 4.0 because prior to 4.0, WCF was not adding the Accept-Encoding header.

Q: Can I turn off decompression support from the WCF client?
A:
Yes, you can explicitly set the DecompressionEnabled property to false on the HTTP binding. It’s set to true by default.

Q: How does the performance of the GZipMessageEncoder compare to WCF?
A:
Note that this is more of a comparison of the compression library in the .Net framework to that in IIS. The framework uses a compression library that was tuned to be faster but have a lower compression ratio. There are a number of open source compression libraries for .Net out there that have similar speed but higher compression ratios. There is no simple answer to this question because it’s going to depend on the network limitations and the size and content of the messages being transferred. But my rule of thumb would be that if your bottleneck is network bandwidth, IIS will do better because it compresses better in general. However, there has been quite some work done in the framework’s compression library that will likely be visible in the next .Net version (post-4.0).

???????? ?? ??, ??? ?????????? ??????? x64 ??????????? ????????? ???????????? ??? ??????????, ?? ?? ??????? ???????????? ??? ? ????? ????????

???????? ?? ??, ??? ?????????? ??????? x64 ??????????? ????? ??? ?????????? ?????? ??????? ?????????? (?????????? ? ?????????), ??? ??????? ?????????? ???????????? ????, ????? ??? ????? ?????????????? ?????? ??? ???????? ??????????. ??? ?????? 32 ????? ??????, ????????? ??? ?????????? ????????????? ?????????? ????????.
? ??? ???? ???????? ?????????, ??????? ???????? ????????? ??? ??????????? ???????????, ?? ????? ??? ?????????????? ? ???????????? ??????? ???????????, ??? ????? ?? ???? ???????????. ??? ??? ??????? ?? ???????? ?????????? ???????? ?????????? argc ? argv:
int __cdecl
wmain( int argc, WCHAR** argv ) { … }
??? ??????????? ??????????? ???????????? ?????????? ???:
mov [rsp+10h],rdx // argv
mov [rsp+8],ecx // argc
sub rsp,158h // ????????? ??????????
mov [rsp+130h],0FFFFFFFFFFFFFFFEh

?? ????? ?? ????????? ?????????? ? ????????????, ?? ?????????? ?????-?? ????????:
mov rax,rsp
push rsi
push rdi
push r13
sub rsp,0E0h
mov qword ptr [rsp+78h],0FFFFFFFFFFFFFFFEh
mov [rax+8],rbx // ??? ?????? ???? ecx (argc)
mov [rax+10h],rbp // ??? ?????? ???? edx (argv)
????? ??????????? ?????????, ?????????? Visual C++ x64 ???????? ??? ??????????? ????????? ? ??????????????? ?????. ? ?????? ???????? ???? ???????? ???????? ??????, ????????????? ? ????????? ????????? ???????, ?? ???????? ??????? ???????? ??????? ??????????? ? ???, ??? ?? ????????? ??????????? ? ?????? ?????????? ?????????? ???????, ????????????? ???, ??? ????????? ?? ??????????????????.
????? ??????????? ????????, ?????????? ?????????? ????? ??????????? ? ????????? ???????? ???????? ???????? ? ????????????? ?????? ??? ?????????? ????? ?????, ????? ????????? ????? ?????????? ?? ????????????. ???? ?? ????????????, ??? ???????? argc ?? ????????? ????????? ? ?????? (????????, ?? ???????? ??? ? ???????), ????? ?? ????? ???????????? ???? ????????? argc ??? ????-?????? ???????, ? ?????? ?????? ?? ???????????? ??? ?????????? ???????? rbx.
?? ?????? ????????? ????? ?? ????????? ???? ? x86-????, ????? ??????, ???????????? ??? ???????? ??????????, ????? ???? ???????? ???????????? ??? ?????? ?????, ????? ???? ??? ???????? ????????? ?????? ?? ????????? ? ??????. (?????????? ????? ????????? ???????? ? ??????? ? ???????????? ??? ?? ???????? ? ?????????? ????? ???????, ? ???? ?????? ??????? ??????, ? ??????? ???????? ???? ????????, ?????????? ?????????????? ? ????? ???? ???????????? ??? ?????-???? ?????? ????).
? ????? ?? ????????? ?? ?? ??????????? ? ????? ???????? ?????????, ? ????, ??????????? ? ?????? ? ????? ??????? ??? ??????? ??????? ? ??????????????. ???????? ??????????? ? ???-?? ??????. (? ?????? ?????, ??? ????????? ???-?? ? ????? ?????????. ?? ??????? ????????? ??????? ? ???, ??? ??????? ????? ???????? — ??? ?????? ? ??????????? ).
?????????? : ? ??????????? ????????? (???, ? ?????????, ?????? ????? ?????) ?????? ?????????, ??? ???????? ???? ? ?? ?????????. ??? ????????? ????? ??????? ?????? ???????? assert ? ????????? ???????? assert ? ???????????? ?????? (??????? ??????????? ???????? /DNDEBUG), ??? ????????, ??? ? ????? ?????? ??? ??????? ??????? ?? ??????????.
? ??????????? ???? : ????????? ??????? ????????????????? x64-???? . ??? ??????? .frame /r ????????????? ???????? ? ???????????? ???????? ???????….(read more)

HTML5 Contest | End Soon | $40,000 Prizes

The submission deadline is May 8th so it’s going to end soon.  Submit Now ! Description: The Dev Unplugged Contest is all about pushing browsers to their limits using HTML5 to create amazing experiences in the browser for a chance to win ,000 in prizes!  The contest focuses on two categories that are hot right now in the HTML5 space: Gaming and Music.  Submissions must fit into one of those categories and work across the major browsers (IE9, FF4 & Chrome). The top winners will be featured on sites with tens of millions of visitors, such as BeautyOfTheWeb.com , IEGallery.com , and TheFWA.com .  We’ve also licensed amazing content from Darkhorse Comics , AWOLNATION and Ra Ra Riot for devs to incorporate into their submissions.  Bonus prizes for developers who do cool stuff with Geolocation and other innovative technologies! Top links: · Contest landing page – www.beautyoftheweb.com/dev/unplugged · Submission gallery – contest.beautyoftheweb.com · Blog post – http://windowsteamblog.com/ie/b/ie/archive/2011/03/01/dev-unplugged-kicks-off-pushing-the-limits-of-html5-in-gaming-and-music.aspx…(read more)