On my machine, windows 7 - Enterprise with 1 x Intel Xeon E5-1660 0 @ 3.30Ghz (6 cores/cpu with Hyper Threading activated), Environment.ProcessorCount return 12 which is exact.
On a Windows Server 2012 with 2 x Intel Xeon E5-2697 v3 @ 2.60GHz (14 cores/cpu with Hyper Threading activated(I think because task manager show: 2 sockets, 28 cores, 56 logical processors)), Environment.ProcessorCount return 28 which appears to us as wrong because 2x14x2 = 56.
Why on Windows Server 2012 c# method Environment.ProcessorCount does not return the proper number of logical processors?
As Additional information, environment variables are as follows: NUMBER_OF_PROCESSORS=28
Update 2015-05-26:
There is a more details/reasons of this related bug in my other question: Unable to use more than one processor group for my threads in a C# app. Mainly I think that C# does only use one processor group. What's werid was that on our server, there was 2 processor groups although there was only 56 logical processors. But this HP CUSTOMER ADVISORY explain why our server bios configuration were inducing windows in error.
Environment.PermissionAccess
is giving you any CPU information :-) I can't even find it documented. – Damien_The_Unbeliever